Django4.0 编写更多视图

2022-03-12 11:13 更新

现在让我们向 ​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部分是一种转换形式,用来确定应该匹配网址路径的什么模式。冒号 (:) 用来分隔转换形式和模式名。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号