反向解析不带参数的URL模式
定义:
随着功能的增加会出现更多的视图,可能之前配置的正则表达式不够准确,于是就要修改正则表达式,但是正则表达式一旦修
改了,之前所有对应的超链接都要修改,真是一件麻烦的事情,而且可能还会漏掉一些超链接忘记修改,此时就需要反向解析
的办法。
url反向解析:根据url路由规则,动态生成对应的url链接(防止硬编码)
反向解析不带参数的URL模式
views.py文件
from django.urls import HttpResponse
from django.urls import reverse
def getReverse(request):
return HttpResponse('反向解析请求的url路径为:%s' %reverse('urlReverse')) #reverse()的参数就是urls中定义的name值
urls.py文件
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('reverse/abc',views.getReverse,name='urlReverse'),
path('root/',include('myapp.urls')),
]

反向解析不带参数的URL模式.png
反向解析带参数的URL模式
如果URL模式使用了参数,在使用reverse()执行反向解析时,则可以使用命名参数args或kwargs设置反向解析参数,
格式如下:
reverse("URL模式名称", args=[参数列表])
reverse("URL模式名称", kwargs={参数字典})
反向解析带参数的URL模式
views.py文件
from django.urls import HttpResponse
from django.urls import reverse
#带列表参数的反向解析
def getReverse2(request,data):
return HttpResponse('反向解析列表参数请求的url路径为:%s' %reverse('urlReverse2',args=[data]))
#带字典参数的反向解析
def getReverse3(request,data):
return HttpResponse('反向解析字典参数请求的url路径为:%s' %reverse('urlReverse3',kwargs={"data":data}))
urls.py文件
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('reverse3/<data>', views.getReverse3, name='urlReverse3'),
path('reverse2/<data>', views.getReverse2, name='urlReverse2'),
path('reverse/abc',views.getReverse,name='urlReverse'),
path('root/',include('myapp.urls')),
]

反向解析带列表参数的URL模式.png

反向解析带字典参数的URL模式.png