【NB】编写更多的视图
http://cdn.u1.huluxia.com/g4/M02/E2/C9/rBAAdmNsaXCAansqAADQ4EfoNCk801.jpg
现在,让我们添加一些视图在 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)
http://cdn.u1.huluxia.com/g4/M02/E2/C9/rBAAdmNsaXGAPP-0AAJs07nf3vs645.jpg
这些新的视图加入到 polls.urls 模块中如下的 url() 调用,polls/urls.py文件中的代码如下:
from django.conf.urls import url
from . import views
urlpatterns = [
# ex: /polls/
url(r'^$', views.index, name='index'),
# ex: /polls/5/
url(r'^(?P<question_id>+)/$', views.detail, name='detail'),
# ex: /polls/5/results/
url(r'^(?P<question_id>+)/results/$', views.results, name='results'),
# ex: /polls/5/vote/
url(r'^(?P<question_id>+)/vote/$', views.vote, name='vote'),
]http://cdn.u1.huluxia.com/g4/M02/E2/C9/rBAAdmNsaXKANHkFAAKZokUm5uw437.jpg
可以在浏览器打开“/polls/34/”。
它会运行detail()方法,并显示任何提供的URL内容。
再次尝试访问 “/polls/34/results/” and “/polls/34/vote/”– 这将显示占位符结果和投票页面。
include() 可以很容易包含入插件和网址。
因为polls是在它们自己的URL配置(polls/urls.py),它们可以放置在“/polls/”,或 “/fun_polls/”,或在“/content/polls/”,或任何其它路径的根,应用程序仍然可以工作。
下面是如果用户进入“/polls/34/”,在这个系统会发生什么:
Django会找到匹配'^polls/'
然后,Django会去掉匹配的文本("polls/"),并发送剩余的文本 – "34/" – 到'polls.urls'URL配置用于进一步处理相匹配 r'^(?P<question_id>+)/$'从而调用detail() 视图,如下所示:
detail(request=<HttpRequest object>, question_id='34')http://cdn.u1.huluxia.com/g4/M02/E2/C9/rBAAdmNsaXKAZCduAABoY4uRAaU783.jpg
question_id='34' 是来自 (?P<question_id>+)的一部分,用周围的模式括号“捕捉”匹配该模式文本,并将其作为参数传递给视图函数;?P<question_id> 定义了将被用来识别所述匹配的模式的名称;以及+ 正则表达式匹配一个数字序列(在一个数字)。
由于URL模式是正则表达式,可以使用它来做一些事情,没有任何限制。而且也没有必要添加URL为.html – 除非你想,在这种情况下,你可以这样做:
url(r'^polls/latest\.html$', views.index),http://cdn.u1.huluxia.com/g4/M02/E2/C9/rBAAdmNsaXOAMQIHAABPnaIpMXI989.jpg
页:
[1]