概况
Django中的视图的概念是:一类具有相同功能和模板的网页的集合。
在Django中,网页和其他内容都是从视图派生而来。每一个视图表现为一个简单的Python函数(或是方法,如果是在基于类的视图里的话)。Django将会根据用户请求的URL来选择使用用哪个视图。
编写更多视图
在polls/views.py里添加更多视图。增加一些接受参数
# 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
# polls/urls.py
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/34/",Django将会运行detail()方法并且展示在URL提供的问题ID。
当某人请求网站的某一页面时,例"polls/34/",Django将会载入mysite.urls模块,因为这个配置项ROOT_URLCONF中设置了。
然后Django寻找名为urlpatterns变量并且按序匹配正则表达式。找到匹配项"polls/",它切掉了匹配的文本(“polls/”),将剩余文本"34/",发送至"polls.urls",URLconf做进一步处理。
在剩余文本匹配了"int:question_id/",使得Django以如下形式调用detail()
detail(request=<HttpRequest object>, question_id=34)
question_id=34由int:question_id匹配生成。使用尖括号”捕获"这部分URL,且以关键字参数的形式发送给视图函数。
上述字符串的:question_id部分定义了将被用于区分匹配模式的变量名,而int:则是一个转换器决定了应该以什么变量类型匹配这部分的URL路径。
写一个有用的视图
每个视图必须要做的只有两件事
- 返回一个包含请被请求页面内容的HttpResponse对象
- 抛出一个异常,例Http404。