Django4.0 编写更多视图
现在让我们向 polls/views.py
里添加更多视图。这些视图有一些不同,因为他们接收参数:
def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)
def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)
def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)
把这些新视图添加进 polls.urls
模块里,只要添加几个 url()
函数调用就行:
from django.urls import path
from . import views
urlpatterns = [
# ex: /polls/
path('', views.index, name='index'),
# ex: /polls/5/
path('<int:question_id>/', views.detail, name='detail'),
# ex: /polls/5/results/
path('<int:question_id>/results/', views.results, name='results'),
# ex: /polls/5/vote/
path('<int:question_id>/vote/', views.vote, name='vote'),
]
然后看看你的浏览器,如果你转到 "/polls/5/" ,Django 将会运行 detail()
方法并且展示你在 URL 里提供的问题 ID。再试试 "/polls/5/results/" 和 "/polls/5/vote/" ——你将会看到暂时用于占位的结果和投票页。
当某人请求你网站的某一页面时——比如说, "/polls/5/" ,Django 将会载入 mysite.urls
模块,因为这在配置项 ROOT_URLCONF
中设置了。然后 Django 寻找名为 urlpatterns
变量并且按序匹配正则表达式。在找到匹配项 'polls/'
,它切掉了匹配的文本("polls/"
),将剩余文本——"5/"
,发送至 'polls.urls' URLconf 做进一步处理。在这里剩余文本匹配了 '<int:question_id>/'
,使得我们 Django 以如下形式调用 detail()
:
detail(request=<HttpRequest object>, question_id=34)
问题 question_id=34
来自 <int:question_id>
。使用尖括号 "获得" 网址部分后发送给视图函数作为一个关键字参数。字符串的 question_id
部分定义了要使用的名字,用来识别相匹配的模式,而 int
部分是一种转换形式,用来确定应该匹配网址路径的什么模式。冒号 (:) 用来分隔转换形式和模式名。
更多建议: