Django进阶之反向解析(详细)

文章介绍了在Django中避免硬编码链接的方法,通过设置路由命名空间和别名,利用模板的url标签动态生成链接。当路由规则改变时,动态链接能自动更新,简化了因路由变化需大量修改链接的问题。动态路由传参的示例展示了一参数和两参数的情况。

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

如果在视图、模板中使用了硬编码链接,在url配置发生改变时,就需要对原来的链接进行一一修改,费时费力还容易遗漏。解决办法是使用模板的时候,可以通过对路由设置命名空间和别名,然后通过url标签动态生成链接。以后链接会随路径正则变化自动更新。

目录

硬编码链接

配置路由

视图

模板

动态链接

设置命名空间

定义路由别名

动态生成网址

修改路由规则

动态路由传参

一个参数

两个参数

总结


硬编码链接

硬编码路由就是通常我们直接写的地址栏的链接去掉域名后的部分。

这种简单方便,访问什么一目了然。缺点也是很明显,可以接着往下看。

配置路由

path('fan', views.fan),

视图

def fan(request):

    return render(request, 'test/fan.html')

模板

设置模板链接进行跳转

<a href="/myapp/fan">点击跳转</a>

设置跳转后的页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>反向解析</title>
</head>
<body>
  <h2>反向解析</h2>
</body>
</html>

当我们修改了路由正则,就无法访问到原来的路由,需要修改原有链接才可继续访问。

而一般这个时候,我们会有很多地方都要修改,很麻烦还容易遗漏。

动态链接

动态链接是通过反向解析动态来生成的,需要一些设置,使用起来后期路由变动不受影响。

下面将演示如何设置和使用动态链接。

设置命名空间

设置命名空间有三种方式:

1.修改根路由文件中该应用路由的命名空间

格式为include(('应用路由','命名空间'))

urlpatterns = [
    path('admin/', admin.site.urls),

    # 增加路由 指向myapp urls
    path(r'', include(('myapp.urls', 'app'))),
]

2.直接在urlpatterns中定义命名空间

app_patterns = ([
    path('', include('myapp.urls')),
], 'app')

urlpatterns = [
    path('admin/', admin.site.urls),

    # 增加路由 指向myapp urls
    path(r'myapp/', include(app_patterns)),
]

app_patterns是一个元组,第一个参数是path()或re_path()列表,第二个参数是URL的namespace。当使用include()方法引用app_patterns时,系统会自动为app_patterns中的所有URL添加namespace。

3.在应用子路由文件中设置命名空间

from django.urls import path
from . import views

app_name = 'app'

定义路由别名

path('fan', views.fan, name='fan'),

动态生成网址

<a href="/myapp/fan">/myapp/fan</a>
<br/>
<a href="{% url 'app:fan' %}">{% url 'app:fan' %}</a>

修改路由规则

path('fan1', views.fan, name='fan'),

刷新原有页面可发现动态生成的网址已发生改变,下面的动态路由已变更为最新的fan1,原来的为/myapp/fan。

 

动态路由传参

下面将演示动态链接传参情况设置与使用。

一个参数

路由

path('fan/<int:num>', views.fan, name='fan'),

模板

<a href="/myapp/fan/111">/myapp/fan/111</a>
<br/>
<a href="{% url 'app:fan' 222 %}">{% url 'app:fan' 222 %}</a>

两个参数

路由

path('fan/<int:num>/<int:num2>', views.fan, name='fan'),

模板

<a href="/myapp/fan/111/222">/myapp/fan/111/222</a>
<br/>
<a href="{% url 'app:fan' 111 222 %}">{% url 'app:fan' 111 222 %}</a>

总结

改为使用反向解析的动态路由后,修改路由正则规则,链接会自动变化为最新设置的路由。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值