URL配置
URL配置就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。
基本格式
from django.conf.urls import url
from django.contrib import admin
from app1 import views //视图
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
]
r’^index/’ : 访问路径
views.index : 视图中的函数
别名和反向解析
别名
给url匹配规则起别名,通过别名就可以调用当前的url,避免url路径改变后,前端访问这个路径的标签也需要修改
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index2/', views.index,name="index"), # 起别名
url(r'^login2/', views.login,name="login"),
]
反向解析
模板渲染的时候,被django解析成了这个名字对应的那个url,这个过程叫做反向解析
<!--前端-->
{% url '别名' "参数1" "参数2" %}
在视图函数中
# 后端
from django.urls import reverse # 导入模块
def index(request):
print(reverse("index"))
return render(request,"index.html")
# 带参
def login(request):
print(reverse("login",args=("参数1","参数2")))
print(reverse("login",kwargs={"参数1":"值","参数2":"值"}))
return render(request,"login.html")
分组
可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。
无名分组
# urls.py
url(r'^index/(\d+)/(\d+)/', views.index,name='index')
# views.py
def index(request,m,n) # 位置传参,位置不可变
有名分组
# urls.py
url(r'^index/(?P<name>\d+)/(?P<age>\d+)/', views.index,name='index')
# views.py
def index(request,name,age) # 关键字传参,位置可以不固定
命名空间
多个应用下,别名冲突时,可能会导致无法url无法正常使用,命名空间可以保证别名对应url的唯一性。
创建多个app,然后配置app,并在每个app应用文件夹下面创建urls.py文件
# 项目的urls.py文件
from django.conf.urls import include
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app01/', include('app01.urls',namespace='app01')),
url(r'^app02/', include('app02.urls',namespace='app02')),
]
# app应用下的urls.py文件
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^index/', views.index,name='index'),
]
反向解析
# 反向解析:
reverse('命名空间名称:别名')
# 例
reverse('app01:index')
# 页面
{% url 'app01:index' %}