一 简单的路由配置
from django.conf.urls import url from app import views urlpatterns = [ path('/',views.index) ]
二 有名分组
先欠着
三 分发
from django.conf.urls import include, url urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^blog/', include('blog.urls')), #include 就是分发 ]
四 反向解析
反向代理的作用是 当有一个需求或多个需求导致URL的改变,也就是修改原来URL,以获取新的URL最终形式,以用于切入到生成的内容中,人们不希望一个个的去修改这些URL(就是硬编码URL)。
因此 在需要URL的地方,对于不同层级,Django提供不同的工具用于URL反查,反向解析有两种方式:
1 在模板中:使用URL模板标签
2 在Python中:使用django.core.urlresolvers.reverse()
函数
urls.py
from django.conf.urls import url from . import views urlpatterns = [ url('/index', views.index, name='indexs'), ]
方式一:python的视图函数中(使用reverse反向解析):
from django.core.urlresolvers import reverse #reverse就是反向解析 from django.http import HttpResponseRedirect def redirect_to_year(request): # ... year = 2006 # ... return HttpResponseRedirect(reverse('indexs', args=(year,)) ## 同redirect("/index")
方式二:在模板中使用(使用url):
<a href="{% url 'indexs' 2012 %}">2012 Archive</a> <ul> {% for yearvar in year_list %} <li><a href="{% url 'indexs' yearvar %}">{{ yearvar }} Archive</a></li> {% endfor %} </ul> #在模板中 url 就是反向解析
注意;当命名你的URL 模式时,请确保使用的名称不会与其它应用中名称冲突。如果你的URL 模式叫做comment
,而另外一个应用中也有一个同样的名称,当你在模板中使用这个名称的时候不能保证将插入哪个URL。在URL 名称中加上一个前缀,比如应用的名称,将减少冲突的可能。
五 名称空间
命名空间是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。
project的urls.py
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^app01/', include("app01.urls",namespace="app01")), url(r'^app02/', include("app02.urls",namespace="app02")), ] #namespace 就是名称空间
app01.urls:
urlpatterns = [ url(r'^index/', index,name="index"), ]
app02.urls:
urlpatterns = [ url(r'^index/', index,name="index"), ]
app01.views
from django.core.urlresolvers import reverse def index(request): return HttpResponse(reverse("app01:index"))
app02.views
from django.core.urlresolvers import reverse def index(request): return HttpResponse(reverse("app02:index"))