django反向解析


反向解析

一:普通路径

在 urls.py 中给路由起别名,name="路由别名"

path("login1/", views.login, name="login")

 在 views.py 中,从 django.urls 中引入 reverse,利用 reverse("路由别名") 反向解析:

return redirect(reverse("login"))

 在模板 templates 中的 HTML 文件中,利用 {% url "路由别名" %} 反向解析。

"{% url 'login' %}" method="post">

 二:正则路径(无名分组)

 在 urls.py 中给路由起别名,name="路由别名"

re_path(r"^login/([0-9]{2})/$", views.login, name="login")

 在 views.py 中,从 django.urls 中引入 reverse,利用 reverse("路由别名",args=(符合正则匹配的参数,)) 反向解析。

return redirect(reverse("login",args=(10,)))

 在模板 templates 中的 HTML 文件中利用 {% url "路由别名" 符合正则匹配的参数 %} 反向解析。

"{% url 'login' 10 %}" method="post">

三:正则路径(有名分组)

在 urls.py 中给路由起别名,name="路由别名"
re_path(r"^login/(?P[0-9]{4})/$", views.login, name="login")

 在 views.py 中,从 django.urls 中引入 reverse,利用 reverse("路由别名",kwargs={"分组名":符合正则匹配的参数}) 反向解析。

return redirect(reverse("login",kwargs={"year":3333}))

 在模板 templates 中的 HTML 文件中,利用 {% url "路由别名" 分组名=符合正则匹配的参数 %} 反向解析。

"{% url 'login' year=3333 %}" method="post">

 参考: Django 路由 | 菜鸟教程 (runoob.com)

Example:  

urls.py

from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('mainroute//', views.mainr,name="namespacemainroute"),
]

wiews.py

from django.shortcuts import render,HttpResponse,reverse

# Create your views here.

def mainr(request,id):

    name="pfer"
    age=18
    print ("locals",locals())
    print ("Reverse url",reverse("namespacemainroute",kwargs={'id':id}))
    print ("Reverse url", reverse("namespacemainroute", args=(id,)))
    print ("get id",id)
    return render(request,"mainr.html",{"locals":locals()})

mainr.html


"en">

    "UTF-8">
    Title


    

This is {{ locals }}

This is {{ locals.name }}

This is {{ locals.age }}

This is id {{ locals.id }}

"{% url 'namespacemainroute' locals.id %}?province=shanxi">link