• 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



  • 相关阅读:
    3.7日复习
    作业
    小米官网需要的数据
    EL&JSTL
    变量和运算符
    jsp
    session的应用----验证码
    restframework-总结
    Django-Rest-Framework部分源码流程分析
    Django-Rest-Framework
  • 原文地址:https://www.cnblogs.com/riskyer/p/3299596.html
Copyright © 2020-2023  润新知