简单示例
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]
-
要从 URL 中取值,使用尖括号。
-
捕获的值可以选择性地包含转换器类型。比如,使用 int:name 来捕获整型参数。如果不包含转换器,则会匹配除了 / 外的任何字符。
-
这里不需要添加反斜杠,因为每个 URL 都有。比如,应该是 articles 而不是 /articles 。
-
一些请求的例子:
-
/articles/2005/03/ 会匹配 URL 列表中的第三项。Django 会调用函数 views.month_archive(request, year=2005, month=3) 。
-
/articles/2003/ 将匹配列表中的第一个模式不是第二个,因为模式按顺序匹配,第一个会首先测试是否匹配。请像这样自由插入一些特殊的情况来探测匹配的次序。在这里 Django 会调用函数 views.special_case_2003(request)
-
/articles/2003 不匹配任何一个模式,因为每个模式要求 URL 以一个斜线结尾。
-
/articles/2003/03/building-a-django-site/ 会匹配 URL 列表中的最后一项。Django 会调用函数 views.article_detail(request, year=2003, month=3, slug="building-a-django-site") 。
路径转换
- str - 匹配除了 '/' 之外的非空字符串。如果表达式内不包含转换器,则会默认匹配字符串。
- int - 匹配 0 或任何正整数。返回一个 int 。
- slug - 匹配任意由 ASCII 字母或数字以及连字符和下划线组成的短标签。比如,building-your-1st-django-site 。
- uuid - 匹配一个格式化的 UUID 。为了防止多个 URL 映射到同一个页面,必须包含破折号并且字符都为小写。比如,075194d3-6885-417e-a8a8-6c931e272f00。返回一个 UUID 实例。
- path - 匹配非空字段,包括路径分隔符 '/' 。它允许你匹配完整的 URL 路径而不是像 str 那样匹配 URL 的一部分。
使用正则表达式
from django.urls import path, re_path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
]
路由分发
路由分发:在每个应用目录下建立自己的子路由urls.py文件,然后在总路由中添加每个app的urls.py的路径,由总路由做路由分发的处理。当请求数据经过路由层的时候,就会识别当前url属于哪个app,直接发给对应的app,在通过app下的子路由去处理
子路由
在应用目录下建立urls.py文件
# 在子路由中
from django.urls import path
from app01 import views
urlpatterns = [
path('index/', views.index_func),
]
总路由
总路由中导入include,将子路由的关系导入,通过
path('app名/', include('app名.urls'))
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('app01/', include('app01.urls')),
]
URL 的反向解析
from django.urls import path
from . import views
urlpatterns = [
#...
path('articles/<int:year>/', views.year_archive, name='news-year-archive'),
#...
]
<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>
{# Or with the year in a template context variable: #}
<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
标签:articles,匹配,views,Django,urls,path,路由
From: https://www.cnblogs.com/fuchangjiang/p/17855019.html