django编写视图
创建一个 polls 目录,它的目录结构大致如下:
polls/__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
目录结构包括了投票应用的全部内容
打开 polls/views.py输入python代码:
#polls/views.pyfrom django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
这是 Django 中最简单的视图。如果想看见效果,我们需要将一个 URL 映射到它——这就是我们需要 URLconf 的原因了。
为了创建 URLconf,请在 polls 目录里新建一个 urls.py 文件。你的应用目录现在看起来应该是这样:
polls/__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
在 polls/urls.py 中,输入如下代码:
from django.urls import pathfrom . import views
urlpatterns = [
path('', views.index, name='index'),
]
URLconfs 中使用的 django.urls 函数
path()
path(route, view, kwargs=None, name=None)
返回一个元素,以便包含在 urlpatterns 中。例如:
from django.urls import include, pathurlpatterns = [
path('index/', views.index, name='main-view'),
path('bio/<username>/', views.bio, name='bio'),
path('articles/<slug:title>/', views.article, name='article-detail'),
path('articles/<slug:title>/<int:section>/', views.section, name='article-section'),
path('blog/', include('blog.urls')),
...
]
route 参数应该是一个字符串或 gettext_lazy() ,它包含一个 URL 模式。这个字符串可以包含角括号(就像上面的 <username>)来捕获 URL 的一部分,并将其作为关键字参数发送给视图。角括号可以包含一个转换器规格(像 <int:section> 的 int 部分),它限制了匹配的字符,也可以改变传递给视图的变量的类型。例如,<int:section> 匹配一串十进制数字,并将值转换为 int。
view 参数是一个视图函数或 as_view() 的结果,用于基于类的视图。它也可以是一个 django.urls.include()。
kwargs 参数允许你向视图函数或方法传递附加参数。
re_path()
re_path(route, view, kwargs=None, name=None)
返回一个元素,以便包含在 urlpatterns 中。例如:
from django.urls import include, re_pathurlpatterns = [
re_path(r'^index/$', views.index, name='index'),
re_path(r'^bio/(?P<username>\w+)/$', views.bio, name='bio'),
re_path(r'^blog/', include('blog.urls')),
...
]
route 参数应该是一个字符串或 gettext_lazy() ,它包含一个与 Python 的 re 模块兼容的正则表达式。字符串通常使用原始字符串语法(r''),因此它们可以包含像 /d 这样的序列,而不需要用另一个反斜杠来转义。当进行匹配时,从正则表达式中捕获的组会被传递到视图中 —— 如果组是命名的,则作为命名的参数,否则作为位置参数。值以字符串的形式传递,不进行任何类型转换。
view、kwargs 和 name 参数与 path() 相同。
include()
include(module, namespace=None)
include(pattern_list)
include((pattern_list, app_namespace), namespace=None)
一个函数,它接收一个完整的 Python 导入路径到另一个应该被 “包含” 在这里的 URLconf 模块。可以选择指定 application namespace 和 instance namespace,在这两个空间中,条目将被包含进去。
通常,应用程序的命名空间应该由包含的模块指定。如果设置了应用程序命名空间,namespace 参数可以用来设置不同的实例命名空间。
include() 也接受一个返回 URL 模式的迭代函数或一个包含这种迭代函数加上应用程序名称空间的二元元组作为参数。
参数:
module -- URLconf 模块(或模块名称)
namespace (str) -- 包含的 URL 条目的实例命名空间。
pattern_list -- 可迭代的 path() 和/或 re_path() 实例。
app_namespace (str) -- 被包含的 URL 条目的应用命名空间