urls.py
from django.urls import path, include
django请求站点的方法:
- ROOT_URLCONF,在settings.py中设置。
- 寻找urlpatterns,它是django.conf.urls.url()实例的一个python列表。
- dnango依次匹配每个URL模式,在第一个匹配停下。
- 一旦一个正则表达式匹配,django就调用对应的视图,视图获得HttpRequest实例,如果是没有命名的组返回内容作为位置参数,如果是命名的组返回内容作为关键字参数。
- 如果没有匹配到或者过程跑出异常,django调用合适的错误处理。
项目的URL
项目的URL主要用来包含应用的URL以及全局的URL:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
# 默认的项目的admin的url
path('admin/', admin.site.urls),
# 在项目URL添加链接到应用URL:
# 在下面添加你的所有应用的url,
path('polls/', include('polls.urls')),
]
应用的URL
将应用的视图映射到URL,需要在应用目录新建urls.py文件,然后在项目的url中包含应用的url。
urlpatterns是url()实例类型的python列表。
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
# 普通视图
path('', views.index, name='index'),
# 类视图
path('', views.IndexView.as_view(), name='index'),
]
没有命名的组
视图函数只有request参数,匹配的正则表达式作为位置参数。
url(r'^pattern1/pattern2/$', views.index, name='index'),
def index(request):
...
命名组
视图函数除了request参数还有关键字参数,匹配的命名表达式组作为关键字参数,覆盖默认的关键字参数。
使用命名的正则表达式组: (?Ppattern)
name就是关键字参数。
url(r'^pattern1/(?P<name>pattern)/pattern2/$), views.index, name='index),
def index(request, name):
...
错误处理
django会调用一个错误处理视图处理异常。
- handler404 页面没找到
- handler500 服务器错误
- handler403 权限被拒绝
- handler400 无效的请求
你也可以在项目的urls.py中重新定义这些默认视图:
handler404 = 'mysite.views.your_custom_page_not_found_view'
handler500 = 'mysite.views.your_custom_error_view'
handler403 = 'mysite.views.your_custom_permission_denied_view'
handler400 = 'mysite.views.your_custom_bad_request_view'