Django项目 反向解析url

在项目过程中,urlspy 文件中的 url都是写死的 ,如果修改其中的url  那么其他用到这个url的地方都会报错

本质:给url匹配模式起别名 ,然后通过别名拿到具体的url路径

解决方法:在url匹配模式中,定义 name = "别名"

示例:

urls.py文件中修改:

urlpatterns = [
path('add_publist/', views.add_publist,name="add_publist"),  # 新增出版社信息
]

html页面修改如下:
原本:
<a class="btn btn-primary" href="/add_publist/">新增出版社</a>
修改后:
<a class="btn btn-primary" href="{% url "add_publist" %}">新增出版社</a>

views.py文件修改如下:
from django.urls import reverse #这里需要导入
def add_publist(request):
if request.method == "POST":
new_name = request.POST.get("pub_name") # 取出新创建的出版社名称
models.Publisher.objects.create(name=new_name) # 在表中创建新的出版社名称
redirect_url = reverse("publist")
return redirect(redirect_url)
# 请求为get时 返回一个页面
return render(request, "add_publist.html")

二、带参数的url
urlpatterns = [
path('add_publist/([a-zA-Z]+)/$', views.add_publist,name="add_publist"),  # 新增出版社信息
]
html页面:
<a class="btn btn-primary" href="{% url 'add_publist' 'house' %}">新增出版社</a>
views.py  (视图)
from django.urls import reverse    #这里需要导入
def add_publist(request):
if request.method == "POST":
new_name = request.POST.get("pub_name") # 取出新创建的出版社名称
models.Publisher.objects.create(name=new_name) # 在表中创建新的出版社名称
redirect_url = reverse("publist" args=("house",))
return redirect(redirect_url)
# 请求为get时 返回一个页面
return render(request, "add_publist.html")

posted @ 2022-04-03 17:54  张丶先森  阅读(73)  评论(0)    收藏  举报