zoukankan      html  css  js  c++  java
  • Django框架之反向解析

    在使用Django项目时,一个常见的需求时获得URL的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)

    人们强烈希望不要硬编码这些URL(费力,不可扩展且容易产生错误)或者设计一种与URLconf毫不相关的专门的URL生成机制,因为这样容易导致一定程度上产生过期的URL。

    换句话讲,需要的时一个DIY机制。除了其他的点,他还允许设计的URL可以自动更新而不用遍历项目的源代码来搜索并替换过期的URL。

    获取一个URL最开始想到的信息是处理它视图的标识(例如名字),查找正确的URL的其它必要的信息有视图参数的类型(位置参数,关键字参数)

    和值。

    Django提供了一个办法是让URL映射是URL设计唯一的地方。你填充你的URLconf,然后可以双向使用它:

      根据用户/浏览器发起的URL请求,它调正确的Django视图,并从URL中提取它的参数需要的值。

      根据Django视图的标识和将要传递给它的参数的值,获取与之关联的URL。

    第一种方式是我们在前面的章节中一直讨论的用法。第二种方式i叫做方向解析URL,反向URL匹配,反向URL查询或者简单的URL反查。

    在需要URL的地方,对于不同层级,Django提供不同的工具用于URL反查:

      在模板中:使用url模板标签

      在Python代码中:使用django.core.urlresolvers.reverse()函数。

      在更高层的与处理Django模型实例相关的代码中:使用get_absolute_url()方法。

    例子:

    考虑下面的URLconf:

    from django.conf.urls import url
    from . import views
    
    url_patterns = [
        url(r'^articles/([0-9]{4})/$',views.year_archive,name='news-year-archive'),
    
    ]

    根据这里的设计,某一年nnnn对应的归档的URL是/articles/nnnn/

    你可以在模板的代码中使用下面的方法获得他们:

    <a href="{% url 'news-year-archive' 2012 %}"> 2012 Archive</a>
    
    <ul>
        {% for yearvar in year_list %}
        <li>
              <a href="{% url 'news-year-archive' yearvar %}">{{yearvar}} Archive</a>
        </li>
        {% endfor %}
    </ul>

    在Python代码中,这样使用:

    from django.core.urlresolvers import reverse
    from django.http import HttpResponseRedirect
    
    def redirect_to_year(request):
    
            year = 2006
            return HttpResponseRedirect(reverse(''news-year-arhcive',args=(year,)))
    万般皆下品,唯有读书高!
  • 相关阅读:
    Analysis Services features supported by SQL Server editions
    Azure DevOps to Azure AppServices
    Power BI For Competition
    Win10开机“提示语音”以及”随机播放音乐”
    Azure DevOps
    Allow Only Ajax Requests For An Action In ASP.NET Core
    Mobile CI/CD 101
    Configure SSL for SharePoint 2013
    AWS Step Function Serverless Applications
    Cordova Upload Images using File Transfer Plugin and .Net core WebAPI
  • 原文地址:https://www.cnblogs.com/s686zhou/p/11531259.html
Copyright © 2011-2022 走看看