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")

 

 

posted @ 2018-01-25 19:08  JAYWX  阅读(259)  评论(0编辑  收藏  举报