Django的路由层

Posted larken

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django的路由层相关的知识,希望对你有一定的参考价值。

https://www.cnblogs.com/yuanchenqi/articles/8876685.html

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行。

简单的路由配置
from django.conf.urls import url
from . import views
urlpatterns = [
    url(r^articles/2003/$, views.special_case_2003),
    url(r^articles/([0-9]{4})/$, views.year_archive),
    url(r^articles/([0-9]{4})/([0-9]{2})/$, views.month_archive),
    url(r^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$, views.article_detail),
]

命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。

由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致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")),
    ]

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

 

以上是关于Django的路由层的主要内容,如果未能解决你的问题,请参考以下文章

Django的路由层

Django的路由层

Django视图层之路由配置系统(urls)

Django的路由层(urlconf)

Django的路由层

关于Django中路由层(URL-conf)