django反向解析
反向解析
一:普通路径
在 urls.py 中给路由起别名,name="路由别名"。
path("login1/", views.login, name="login")

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

在模板 templates 中的 HTML 文件中,利用 {% url "路由别名" %} 反向解析。
<form action="{% 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 "路由别名" 符合正则匹配的参数 %} 反向解析。
<form action="{% url 'login' 10 %}" method="post">

三:正则路径(有名分组)
在 urls.py 中给路由起别名,name="路由别名"。
re_path(r"^login/(?P<year>[0-9]{4})/$", views.login, name="login")

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

在模板 templates 中的 HTML 文件中,利用 {% url "路由别名" 分组名=符合正则匹配的参数 %} 反向解析。
<form action="{% 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/<str:id>/', 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
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>This is {{ locals }}</h1> <h1>This is {{ locals.name }}</h1> <h1>This is {{ locals.age }}</h1> <h1>This is id {{ locals.id }}</h1> <a href="{% url 'namespacemainroute' locals.id %}?province=shanxi">link</a> </body>
浙公网安备 33010602011771号