Django url的反向解析

本文介绍Django中URL反查的功能与实现方法,包括模版中的url标签使用、Python代码中的reverse函数及模型中的get_absolute_url方法。通过示例展示如何避免硬编码URL,确保项目的可维护性和灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在创建Django项目时,一个常见的需求时如何获得URL的最终形式以嵌入到所生成的Content中(即嵌入到视图中、或URL资源中,或者显示给用户的URL等)或着用于处理服务器端的导航流(如:重定向等)。但是,人们强烈希望不要硬编码这些URL或者设计一种与URLconf毫不相干的专门URL生成机制,因为这样容易导致一定程度上产生过期的URL。
Django提供了一个解决方案使得URL映射时URL设计唯一的储存库。你用你的URLconf填充它,然后可以双取向使用它。
● 根据用户/浏览器发起的URL请求,它调用正确的Django视图,并从URL中提取它的参数需要的值。
● 根据Django视图中的标识和将要传递给它的参数的值,获取与之关联的URL。
其中,第二种方式叫做反向解析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
urlpatterns = [
    #...
    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-archive', args=(year,)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值