Django URL命名与反向解析实战:从基础到地址迁移

陆景行
陆景行
发布时间:2026-10-13 | 5人浏览过
原创

本文详解Django中url path name的使用,涵盖视图渲染、模板中使用{% url %}进行反向解析及传参。重点演示当URL路径变更时,如何通过编写重定向视图函数保持旧链接可用,确保用户访问旧地址时自动跳转至新路径,提升网站维护的灵活性。

Django URL命名基础与视图配置

首先修改 quicktool 应用下的 view.py 文件,定义 index() 视图函数,该函数负责渲染 home.html 模板。


from django.shortcuts import render
def index(request):
  return render(request, 'home.html')

在 quicktool 应用目录下新建 templates 文件夹,并在其中创建 home.html 模板文件。


<!DOCTYPE html>
<html>
<head>
  <title>学习Django</title>
</head>
<body>

<a href="/add2/4/5/" rel="external nofollow" rel="external nofollow" >计算 4+5</a>

</body>
</html>

在 mytestsite/urls.py 配置文件中,为 index() 视图对应的 URL 路径添加 name 属性,命名为 'home'。通过指定名称,即使后续 URL 路径发生改变,仍可通过该名称反向获取正确的 URL。


urlpatterns = [
  path('admin/', admin.site.urls),
  path('', quicktool_views.index, name='home'), # 新增name值
  path('add/', quicktool_views.add, name='add'), # 新增
  path('add2/<int:a>/<int:b>/', quicktool_views.add2, name='add2'),  # 新增
]

启动 Django 开发服务器,访问 http://127.0.0.1:8000/,页面显示正常。

模板中使用反向解析{% url %}

点击页面上的链接会触发计算脚本。由于 home.html 中 <a> 标签的 href 属性是硬编码的“写死”地址,为了使其更具灵活性,我们可以利用 URL 的 name 属性进行传参。在 home.html 中增加如下代码:


#不带参数的:
#{% url 'name' %}
#带参数的:参数可以是变量名
#{% url 'name' 参数 %}

<a href="/add2/4/5/" rel="external nofollow" rel="external nofollow" >计算 4+5</a>
<a href="{% url 'add2' 70 80 %}" rel="external nofollow" >计算 70+80</a>  # 新增

再次启动开发服务器并访问 http://127.0.0.1:8000/,页面显示更新后的内容。

点击第一个 <a> 标签,发起的请求 URL 为 http://127.0.0.1:8000/add2/4/5/。

点击第二个 <a> 标签,发起的请求 URL 为 http://127.0.0.1:8000/add2/70/80/。

第二个 <a> 标签的写法基于 URL 的 name 值进行传参跳转。即根据 mytestsite/urls.py 中 url path() 函数的 name 属性进行匹配,并传入相应的参数值,从而实现“不写死”的动态请求。

URL路径变更与重定向处理

在 url path() 的 name 属性保持不变的前提下,如果修改了 url path() 的第一个路径参数(即 URL 路径本身),<a> 标签通过反向解析获取的网址也会随之动态变化。

例如,


path('add2/<int:a>/<int:b>/', quicktool_views.add2, name='add2'), 

修改为


path('add2/<int:a>/<int:b>/', quicktool_views.add2, name='add2'), 

此外,还需要编写一个处理跳转的函数。Django 不会自动更新已保存的旧链接地址,因此需要手动处理。

假设用户收藏夹中保存的是旧地址 /add2/4/5/,当用户访问该旧地址时,系统应自动将其重定向到新的 /new_add2/4/5/ 地址。

具体操作是在 quicktool/view.py 文件中编写一个重定向函数:


from django.shortcuts import render
from django.http import HttpResponseRedirect
def old_add2_redirect(request, a, b):
  return HttpResponseRedirect(
    reverse('add2', args=(a, b))
  )

在 mytestsite/urls.py 文件中新增对应的 URL 配置:


path('new_add2/<int:a>/<int:b>/', quicktool_views.add2, name='add2'), # 新地址
path('add2/<int:a>/<int:b>/', quicktool_views.old_add2_redirect),  # 旧地址

访问 http://127.0.0.1:8000/,刷新页面后可以看到效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表