Django url反向解析
反向解析:
在urls.py中为url起别名,之后可以在模板中,用模板语言进行url的反向解析,也可以在视图函数中进行url的反向解析
模板:使用模板语言进行反向解析,{% url '别名' %}
####urls from django.conf.urls import url,include from app01 import views urlpatterns = [ url(r'^art/', views.art3, name='app01-art'), ] ####views def art3(request): return render(request,"art.html",{"day":"abc"}) ####art.html <h1>{{ day }}</h1> <a href="{% url 'app01-art' %}">点击</a> #若url更改,则模板中的url引用也会随着更改
视图:在视图函数中调用url,使用reverse('别名')
####urls from django.conf.urls import url,include from app01 import views urlpatterns = [ url(r'^art/', views.art3, name='app01-art'), ] ####views def art3(request): print(reverse('app01-art')) #在视图函数中对url进行反向解析 return HttpResponse("OK")
url的名称空间:
为各url起别名时要根据不同用途进行名称上的区别,但当各应用很多,通过路由分发,各应用中的urls难免会有重复,因此要名称空间,根据不同的应用建立不同名称空间,否则当各url中有重名的,就只会找到最后一个加载的url
#项目的urls.py
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app01/', include('app01.urls',namespace="app01")),
url(r'^app02/', include("app02.urls",namespace="app02")), ]
#app01应用的urls.py文件
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^index/', views.index,name="index"),
]
#app02应用的urls.py文件
from django.conf.urls import url
from app02 import views
urlpatterns = [
url(r'^index/', views.index,name="index"),
]
#在app02的视图函数中反向解析app01中的url和app02中的url
from django.shortcuts import render,HttpResponse
from django.core.urlresolvers import reverse
def index(request):
print(reverse("app01:index")) # /app01/index/
print(reverse("app02:index")) # /app02/index/
return HttpResponse("OK")