Django URL命名与反向解析实战:从基础到地址迁移
本文详解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/,刷新页面后可以看到效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









