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

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

目录

硬编码链接

配置路由

视图

模板

动态链接

设置命名空间

定义路由别名

动态生成网址

修改路由规则

动态路由传参

一个参数

两个参数

总结


硬编码链接

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

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

配置路由

path('fan', views.fan),

视图

def fan(request):

    return render(request, 'test/fan.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'),

动态生成网址

/myapp/fan

{% url 'app:fan' %}

修改路由规则

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

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

 

动态路由传参

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

一个参数

路由

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

模板

/myapp/fan/111

{% url 'app:fan' 222 %}

两个参数

路由

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

模板

/myapp/fan/111/222

{% url 'app:fan' 111 222 %}

总结

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

你可能感兴趣的:(#,Django,django,python)