Django——路由系统

URL配置(URLconf)就像Django所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。

我们就是以这种方式告诉Django,遇到哪个URL的时候,要对应执行哪个函数。

基本格式

from django.conf.urls import url

from . import views

urlpatterns = [
    url('home', views.home),   #简单路由
    url(r'^articles/2003/$', views.special_case_2003),  #匹配路由
    url(r'^articles/([0-9]{4})/$', views.year_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
  1. urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
  2. 若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
  3. 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
  4. 每个正则表达式前面的'r' 是可选的但是建议加上。
  5. Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/'。

 

  • 增加多层级目录

 将很多的URL进行分级处理,分发到其他文件中.

1. 设置setting

在setting.py的INSTALLED_APPS中,添加APP

INSTALLED_APPS = [
    'aboutApp',
]

2. 在主URL中,设置一级URL

from django.urls import path,include

urlpatterns = [
    path('aboutApp/', include('aboutApp.urls')),  #设置主RUL的一级路径
]

3. 设置一级RUL

from aboutApp import views
from django.urls import path,include

urlpatterns = [
    path('aboutApp/',views.aboutApp,name='aboutApp')
]

4. 设置views

在一级目录中,创建views,配置python函数。

from django.shortcuts import HttpResponse

def home(request):
    html = '<html><body>首页</body></html>'
    return HttpResponse(html)
  • 命名空间

在使用命名URL解析时,将会有名称冲突的问题发生。

那么就需要使用命名空间namespace,将不同的URL confs文件进行区分

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 %}
v = reverse('app01:detail', kwargs={'pk':11})

传参:

  • 分组&命名

可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图

  1. 传参永远是字符串形式
  2. 推荐使用命名传参
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),   #month是名称,后面是关键字参数
def book(request,month):
    pass
  • 字典

传递一个Python 字典作为额外的参数传递给视图函数

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

urlpatterns = [
    url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
]

命名URL与URL反向解析

模板使用:

为了方便更改URL地址后,不影响在HTML中的地址解析。

url(r'^home', views.home, name='home'),  # 给我的url匹配模式起名为 home
url(r'^index/(\d*)', views.index, name='index'),  # 给我的url匹配模式起名为index
url(r'^index/(?P<year>[0-9]{4})', views.index, name='index'), 


{% url 'home' %}   #在HTML中引用,会自动匹配home命名的连接地址
{% url 'index' 2023 %} #位置传参形式
{% url 'index' year='2019' %}  #关键字传参
  • reverse(命名URL反向解析)

使用reverse模块将配置好的命名URL地址提取

from django.urls import reverse
url(r'^index/(\d*)', views.index, name='index'), 
url(r'^index/(?P<year>[0-9]{4})', views.index, name='index'),


def info(request):
    reverse("index", args=("2018", ))   #位置传参
    reverse("index", kwargs={'year':'2020'})   #关键字传参

 

posted @   新兵蛋Z  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示