Django之url反向解析
在urls.py文件中,在进行url映射时,为请求的url命个名,以便在模板页面或者views.py视图中可以进行反向解析,同时在修改了url映射的请求路径,名称不变的情况下,不再修改模板页面或者视图中的数据,项目不受影响正常执行!url标签中使用模板变量和普通标签参数一样,空格隔开,{{ % url 别名 %}}即可。
urls.py文件设置:
url(r'^url_reverse/', views.url_reverse,name="view_reverse"), url(r'^login/', views.login,name="logining"),
模板页面url反向解析:
url_reverse.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>页面url反向解析</title> 6 </head> 7 <body> 8 <h1><a href="{% url "logining" %}">登录</a></h1> 9 {#{% url "loging" %}通过url反向解析名称"loging",直接获取到urls.py模块中与之对应的url路径"login/"#} 10 </body> 11 </html>
login.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>login</title> 6 </head> 7 <body> 8 <form action="http://127.0.0.1:8888/login/" method="post"> 9 {% csrf_token %}<!--在进行模板渲染时会自动生成一个隐藏的input标签--> 10 <table> 11 <tr> 12 <td>用户名:</td> 13 <td><input type="text" name="username"></td> 14 </tr> 15 <tr> 16 <td>密码:</td> 17 <td><input type="text" name="userpsd"></td> 18 </tr> 19 <tr> 20 <td><input type="reset"></td> 21 <td><input type="submit" ></td> 22 </tr> 23 </table> 24 </form> 25 </body> 26 </html> 27
views.py视图中url反向解析:
1 from django.shortcuts import render, HttpResponse, redirect 2 from django.urls import reverse 3 4 def url_reverse(request): 5 return render(request,"url_reverse.html") 6 7 def login(request): 8 if request.method=="GET": 9 return render(request,"login.html") 10 elif request.method=="POST": 11 name=request.POST.get("username") 12 psd=request.POST.get("userpsd") 13 if name=="yang" and psd=="123": 14 return HttpResponse("<h1>Success!</h1>") 15 else: 16 return redirect(reverse("view_reverse")) 17 #调用reverse()方法,参数为urls.py中的url名称,进行反向解析拿到"url_reverse/" 18 19 # return redirect("view_reverse") #redirect自带了url反向解析,可以不用重复调用reverse(),直接引用名称
模板页面反向url解析补充:
url标签使用模板变量参数:
urls.py:
url(r'^update/book_id=([0-9]+)', views.update,name="update"),
views.py
return render(request, "update.html", {"book":book_odj})
html:
<form action="{% url "update" book.id %}" method="post">