路由系统

URLconf配置

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图,参数,别名),
]

正则表达式: 正则字符串,匹配路径

views视图: 视图中的函数

参数: 可选,要传递给视图函数的默认参数,字典形式

别名: 可选, name参数

 正则表达式

r'' 开头

最开始的/不用加

从上到下匹配,匹配成功就不再继续

APPEND_SLASH

Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/'。

访问 http://www.example.com/blog 时,默认将网址自动转换为 http://www.example/com/blog/

如果在settings.py中设置了 APPEND_SLASH=False,此时我们再请求 http://www.example.com/blog 时就会提示找不到页面。

分组和命名分组

通过括号对正则表达式进行分组匹配,捕获URL中的值并且以位置参数的形式传给视图,在视图函数里定义相应个数的形参就可以

例: url(r'^blog/([0-9]{4})/([0-9]{2})/', views.blog,name='blog')

命名分组匹配的正则表达式来捕获URL中的值并且以关键字参数的形式传给视图,视图函数中必须使用和name相同的形参

例: url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.blog,name='blog')

URLconf 在请求的URL上查找,捕获的永远都是字符串,不包括GET和POST参数以及域名,所有的请求方法都将路由到相同的函数

视图函数指定默认值

# urls
from django.conf.urls import url
from app01 import views

urlpatterns = [
    url(r'^blog/$', views.page),
    url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
]

# views函数中,可以为num指定默认值
def page(request, num="1"):
    pass

include  路由分发

在urls文件中,可以包含其他的URLconfs文件(有多个app文件,可以看做一级目录,二级目录)

from django.conf.urls import include, url

urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^blog/', include('app02')),  # 可以包含其他的URLconfs文件
]

命名URL和URL反向解析

给URL匹配规则定义别名,通过名字来调用当前的URL

静态地址

命名

url(r'^home', views.home, name='home'),   # 给url匹配模式起名为home

使用

# 在模板中使用

{% url  'home'   %}      # 返回一个完成的url


# 在py文件中使用(views文件)

from django.urls import  reverse

reverse('home')

分组

命名

url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog,name='blog' )

使用

# 在模板中使用

{% url  'blog'  '2019'  '04'  %}      位置参数传参    -----/blog/2019/04
# 在py文件中使用(views文件) from django.urls import reverse reverse('blog',args=('2019','04')) -----/blog/2019/04

命名分组

命名

url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog,name='blog' )

使用

# 在模板中使用

{% url  'blog'  '2019'  '04'  %}      可以按照和分组一样的形式进行传参   

{% url  'blog'  year='2019'  month='04'  %}      按照关键字参数的形式进行传参


# 在py文件中使用(views文件)

from django.urls import  reverse

reverse('blog',args=('2019','04'))        按照位置参数的形式进行传参

reverse('blog',kwargs={year:'2019',month:'04'})     按照关键字参数的形式进行传参

namespace   命名空间

在不同的app文件中,可能会出现url名称重复的现象,可以使用namespace,翻转URL时通过命名空间的名称得到当前的URL

例: 在app01和app02的url文件中,都有detail名称

from django.conf.urls import url, include
 
urlpatterns = [
    url(r'^app01/', include('app01.urls', namespace='app01')),
    url(r'^app02/', include('app02.urls', namespace='app02')),
]

使用

# 在模板中使用

{% url 'app01:detail' pk=12 pp=99 %}


# 在py文件中使用

reverse('app01:detail', kwargs={'pk':11})
原文地址:https://www.cnblogs.com/sandy-123/p/10683707.html