路由传参

在开始本次内容之前,我们先使用Git来进行切换分支。
Git是一个版本控制的工具,在我们的项目右边有它的文档。
大家先不用刻意的学习它,打开它的文档,花半个小时读一下就好了。
因为Git不是靠看文档学的,而是通过直接使用来学习的

接下来,各位只需要复制与粘贴我给出来的指令,通过阅读我给出的注释,去理解。
然后再去看文档。

bash
# 将所有发生变动的文件 进行追踪
$ git add .

# 提交更新
$ git commit -m "Web基础 学习完成"

# 切换到 web-base-1 分支
$ git switch web-base-1

如果有上百上千首歌曲呢???

大家试想一下,如果真的有成千上百首歌曲的歌词的话?
岂不是要在views.py中从article_1到article_9999?,然后在templates目录下写aritlce_1.html到aticle_9999.html文件。

这是当然不可能的,我们可以通过观察歌词详情的网址,如下:

bash
# 人来人往
http://localhost:8000/article/1/

# 新禅院钟声
http://localhost:8000/article/2/

# 挪威的森林
http://localhost:8000/article/3/

# 后来
http://localhost:8000/article/4/

他们的区别只有最后的数字,如果我们可以获取到这个数字,岂不是可以把views.py的article_x函数改写成如下的格式:

python
def article_detail(request, article_number):
    """歌词详情页"""

    # 利用获取到的数字进行拼接, 得到对应的html文件的文件名
    html_file = "article_" + str(article_number) + ".html"
    response = render(request,  template_name=html_file)

    return response

那问题来了,我们该如何获取这个数字??

查阅文档

其实遇到问题的解决方式有三种:

  • 查阅文档,得出答案
  • 在搜索引擎中根据问题的关键字进行搜索答案
  • 向他人发问

我希望大家都能成为第一或第二种,排名不分先后。
即使很不幸,你成为了第三种,需要向他人发问,请尝试按照下面的方法和步骤,成为第一或第二种方式。
通常大家都会在一些论坛发帖提问问题。
以论坛为例:

  • 认真描述好帖子的标题,不要过度轻佻简单,例如:小白求助、新手求助,救救新人。通常这些标题我都不会去理会,虽然我不是什么大神,但是看到一些感兴趣而且我有一定经验的求助帖,我通常都会有思路去引导他人解决问题,而不是直接给出答案,即使我知道答案。
    以现在想要获取网址参数为例,题目应该是Django 如何从网址中获取路径参数?

  • 描述问题,这一步是决定了你能否从第三种转为第一或第二种方式。
    首先描述清楚,你要做什么??
    你这一段代码的目的是解决什么??
    看下这个论坛的编辑器是否有代码的选项,是否支持Markdown(后面我会教大家),把代码工整的排列好。
    即使没有,那就贴图和直接把代码发出来。
    必要的地方要写上注释。
    在什么位置?什么情况下出现的错误或问题。
    最后,写上你解决问题尝试过的方案和方法。

通常情况下,你第一次会靠他人告诉你答案,但是只要你坚持按照上面的方法提问问题。
未来的某一天,你可能会突然灵光一闪,进入到面向文档编程和面向搜索引擎编程的境界。

当然,我们现在的这个问题还真没必要跟他人提问。

我们现在只需要在搜索引擎中输入doc django urls,学习编程的话,搜索引擎就不要使用百度了。
能用谷歌就用谷歌,实在不行那就用Bing的国际版。
结果如下所示:

谷歌:

Bing国际版

第一个结果就是我们的现在问题的答案。

语法

关键词 含义 别称
doc Documentation(文档) Guider(手册或指南)
django 框架名或语言名 必要时需要加上版本号,例如 django2
urls 你在哪里出现了问题就写什么 router(指向)

如果你在views中遇到问题,就可以在搜索引擎中输入doc django views
这种属于是面向文档编程和面向搜索引擎编程的混合用法。
接下来,请各位将views.py中的article_1article_4的函数全部全部删去。
换成下面的函数。

python
def article_detail(request,id):

    html_file = "article_" + str(id) + ".html"
    response = render(request,  template_name=html_file)

    return response

然后将urls.py中的内容替换成下面的内容:

python
from django.urls import path

from django.conf import settings
from django.conf.urls.static import static
from demo import views



urlpatterns = [
        path("", views.home),
        path('article/', views.article_list),
        path('article/<这里该怎么写???>/', views.article_detail),


]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

注意到里面的中文了吗??
如何才能让项目正常启动??
看刚才搜到的页面内容。答案在里面。
不要说什么我英语不好啊,不会看英语。
英语差,你就不会买本英语词典吗???
更何况,你需要看的是Example(示例),而不是文字。

我的答案在下一章节,但我希望各位收获的是,而不是