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



  • 相关阅读:
    Working with WordprocessingML documents (Open XML SDK)
    How to Choose the Best Way to Pass Multiple Models in ASP.NET MVC
    Azure:Manage anonymous read access to containers and blobs
    Convert HTML to PDF with New Plugin
    location.replace() keeps the history under control
    On the nightmare that is JSON Dates. Plus, JSON.NET and ASP.NET Web API
    HTTP Modules versus ASP.NET MVC Action Filters
    解读ASP.NET 5 & MVC6系列(6):Middleware详解
    Content Negotiation in ASP.NET Web API
    Action Results in Web API 2
  • 原文地址:https://www.cnblogs.com/riskyer/p/3299596.html
Copyright © 2011-2022 走看看