URLconfs 中使用的 django.urls
函数¶
path()
¶
- path(route, view, kwargs=None, name=None)¶
返回一个元素,以便包含在 urlpatterns
中。例如:
from django.urls import include, path
urlpatterns = [
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
¶
route
参数应该是一个字符串或 gettext_lazy()`(参见 :ref:`translating-urlpatterns()
),其中包含一个 URL 模式。该字符串可以包含尖括号(如上面的 <username>
)以捕获 URL 的一部分并将其作为关键字参数传递给视图。尖括号中可以包含一个转换器规范(如 <int:section>
中的 int
部分),它限制了匹配的字符,并可能更改传递给视图的变量类型。例如,<int:section>
匹配一串十进制数字并将该值转换为 int
。
在处理请求时,Django 从 urlpatterns
中的第一个模式开始,依次向下遍历列表,将请求的 URL 与每个模式进行比较,直到找到匹配的模式。更多详细信息请参见 Django 如何处理一个请求。
模式不会匹配 GET 和 POST 参数或域名。例如,在请求 https://www.example.com/myapp/
时,URLconf 会查找 myapp/
。在请求 https://www.example.com/myapp/?page=3
时,URLconf 同样会查找 myapp/
。
view
¶
view
参数是一个视图函数或基于类的视图的 as_view()
结果。它也可以是 django.urls.include()
。
当 Django 找到匹配的模式时,它会调用指定的视图函数,并将 HttpRequest
对象作为第一个参数,将路由中“捕获”的值作为关键字参数传递。
kwargs
¶
kwargs
参数允许你向视图函数或方法传递附加参数。参见 传递额外选项给视图函数 的例子。
name
¶
为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。
关于为什么 name
参数是有用的,请参见 命名 URL 模式。
re_path()
¶
- re_path(route, view, kwargs=None, name=None)¶
返回一个元素,以便包含在 urlpatterns
中。例如:
from django.urls import include, re_path
urlpatterns = [
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()
(参见 翻译URL模式),它包含一个与 Python 的 re
模块兼容的正则表达式。字符串通常使用原始字符串语法(r''
),因此它们可以包含像 /d
这样的序列,而不需要用另一个反斜杠来转义。当进行匹配时,从正则表达式中捕获的组会被传递到视图中 —— 如果组是命名的,则作为命名的参数,否则作为位置参数。值以字符串的形式传递,不进行任何类型转换。
当一个 route
以 $
结尾时,整个请求的 URL(与 path_info
匹配)必须与正则表达式模式相匹配(使用 re.fullmatch()
进行匹配)。
view
、kwargs
和 name
参数与 path()
相同。
include()
¶
- include(module, namespace=None)[source]¶
- include(pattern_list)
- include((pattern_list, app_namespace), namespace=None)
一个函数,它接收一个完整的 Python 导入路径到另一个应该被 “包含” 在这里的 URLconf 模块。可以选择指定 application namespace 和 instance namespace,在这两个空间中,条目将被包含进去。
通常,应用程序的命名空间应该由包含的模块指定。如果设置了应用程序命名空间,
namespace
参数可以用来设置不同的实例命名空间。include()
也接受一个返回 URL 模式的迭代函数或一个包含这种迭代函数加上应用程序名称空间的二元元组作为参数。
register_converter()
¶
注册一个转换器的函数,用于 path()
的 route
。
converter
参数是一个转换器类,type_name
是路径模式中使用的转换器名称。参见 注册自定义的路径转换器 的例子。
Deprecated since version 5.1: 覆盖现有的转换器已弃用。
URLconfs 中使用的 django.conf.urls
函数¶
static()
¶
- static.static(prefix, view=django.views.static.serve, **kwargs)¶
用于返回在调试模式下服务文件的 URL 模式的辅助函数:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
handler400
¶
- handler400¶
一个可调用对象,或者一个代表视图的完整 Python 导入路径的字符串,如果 HTTP 客户端发送了一个引起错误条件的请求,并且响应的状态码为 400,那么就会调用该视图。
默认情况下,这是 django.views.defaults.bad_request()
。如果你实现了自定义视图,请确保它接受 request
和 exception
参数,并返回一个 HttpResponseBadRequest
。
handler403
¶
- handler403¶
一个可调用对象,或者一个代表视图的完整 Python 导入路径的字符串,如果用户没有访问资源所需的权限,那么就会调用该视图。
默认情况下,这是 django.views.defaults.permission_denied()
。如果你实现了一个自定义视图,请确保它接受 request
和 exception
参数,并返回一个 HttpResponseForbidden
。
handler404
¶
- handler404¶
一个可调用对象,或者一个代表视图的完整 Python 导入路径的字符串,如果没有任何 URL 模式匹配,那么就会调用该视图。
默认情况下,这是 django.views.defaults.page_not_found()
。如果你实现了自定义视图,请确保它接受 request
和 exception
参数,并返回一个 HttpResponseNotFound
。
handler500
¶
- handler500¶
一个可调用对象,或者一个代表视图的完整 Python 导入路径的字符串,在服务器出错时会被调用。当你在视图代码中出现运行时错误时,就会发生服务器错误。
默认情况下,这是 django.views.defaults.server_error()
。如果你实现了自定义视图,请确保它接受一个 request
参数,并返回一个 HttpResponseServerError
。