【NB】编写更多的视图

[复制链接]
查看521 | 回复0 | 2022-11-14 08:17:34 | 显示全部楼层 |阅读模式


现在,让我们添加一些视图在 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.conf.urls import url

from . import views

urlpatterns = [
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),
]
可以在浏览器打开“/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>[0-9]+)/$'从而调用detail() 视图,如下所示:

detail(request=<HttpRequest object>, question_id='34')
question_id='34' 是来自 (?P<question_id>[0-9]+)的一部分,用周围的模式括号“捕捉”匹配该模式文本,并将其作为参数传递给视图函数;  ?P<question_id> 定义了将被用来识别所述匹配的模式的名称;  以及[0-9]+ 正则表达式匹配一个数字序列(在一个数字)。

由于URL模式是正则表达式,可以使用它来做一些事情,没有任何限制。而且也没有必要添加URL为.html – 除非你想,在这种情况下,你可以这样做:

url(r'^polls/latest\.html$', views.index),
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则