zoukankan      html  css  js  c++  java
  • Django 的逆向解析url--reverse(转)

    https://www.cnblogs.com/zhenfei/p/6368955.html

    Django中提供了一个关于URL的映射的解决方案,你可以做两个方向的使用:

                1.有客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图,

                    获取相应的数据,然后返回给客户端显示

                 2.通过一个视图的名字,再加上一些参数和值,逆向获取相应的URL

    第一个就是平常的请求有URLconf来解析的过程,第二个叫做,url的逆向解析,url逆向匹配,url的逆向查阅,等

    Django提供了不同的层级的url逆向处理工具:

                 1.在模板templates中,使用url标记,如:{% url %}

                 2.在Python代码中,使用django.core.urlresolvers.reverse()方法

                 3.在更高一层级的处理url中,用get_absolute_url()方法

    例子如下:

    看如下的URLconf:

    from django.conf.urls import patterns, url
    
    urlpatterns = patterns('',
        #...
        url(r'^articles/(d{4})/$', 'news.views.year_archive'),
        #...
    )

    根据设计,这个url的目的是将是nnnn年的文章存档(archive),即/articles/nnnn/

    1.在模板中,可以这样来使用:

    <a href="{% url 'news.views.year_archive' 2012 %}">2012 Archive</a>
    {# Or with the year in a template context variable: #}
    <ul>
    {% for yearvar in year_list %}
    <li><a href="{% url 'news.views.year_archive' yearvar %}">{{ yearvar }} Archive</a></li>
    {% endfor %}
    </ul>
    另外还能取一个别名使用
    {% url 'some-url-name' arg arg2 as the_url %}
     
    <a href="{{ the_url }}">链接到:{{ the_url }}</a>

    解释一下:首先,根据视图 'news.views.year_artichive'可以定位到指定的URLconf中,然后后面的2012来填充articles/d{4}

    最终的结果为<a href="articles/2012/">2012 Archive</a>,这里就是根据试图和所提供的值来逆向查询url

    下面的类似,

    2.在python代码中

    from django.core.urlresolvers import reverse
    from django.http import HttpResponseRedirect
    
    def redirect_to_year(request):
        # ...
        year = 2006
        # ...
        return HttpResponseRedirect(reverse('news.views.year_archive', args=(year,)))


    解释一下:首先,必须引入 django.core.urlresolvers.reverse()  方法,然后原理就是,根据提供的试图和参数

    的值来逆向查找URLconf,匹配相应的url然后把值拿回来,最后,reverse()返回的值为:articles/2006/,这样就逆向的查出了

    需要的url

  • 相关阅读:
    GO开发[一]:golang语言初探
    Python带参数的装饰器
    Python函数篇
    19. logging模块
    18. json模块
    17. os模块
    16. sys模块
    15. random模块
    14. 模块-time模块
    29. java面向对象项目
  • 原文地址:https://www.cnblogs.com/kevincaptain/p/10429788.html
Copyright © 2011-2022 走看看