• Django的路由层


    一 简单的路由配置

    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"))
  • 相关阅读:
    sqlserver中判断表或临时表是否存在
    Delphi 简单方法搜索定位TreeView项
    hdu 2010 水仙花数
    hdu 1061 Rightmost Digit
    hdu 2041 超级楼梯
    hdu 2012 素数判定
    hdu 1425 sort
    hdu 1071 The area
    hdu 1005 Number Sequence
    hdu 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/mlhz/p/10289742.html
Copyright © 2020-2023  润新知