zoukankan      html  css  js  c++  java
  • Django之逆向解析url

    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>

    解释一下:首先,根据视图 '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



  • 相关阅读:
    other备忘
    Mdoelsim10.4怎么脚本单独仿真ISE14.7 IP核
    Vivado怎么使用In system debug(类似于chipscope的东西)
    Vivado如何使用bat脚本一键创建工程
    Vivado中VIO核使用
    FPGA上外挂DDR2&DDR3&MIG IP的使用记录
    Vivado2016旧工程IP移动到新工程
    怎样在ISE14.7中固化FLASH文件
    Quartus13.1全编译出现引脚错误(神级bug)
    自用windows小软件
  • 原文地址:https://www.cnblogs.com/riskyer/p/3299596.html
Copyright © 2011-2022 走看看