Django 正向解析與反向解析


正向解析就是按照順序查找訪問(urls.py---view--templates)

反向解析就是根據命名空間命名來調到指定的頁面

用反向解析的原因:

隨着功能的增加會出現更多的視圖,可能之前配置的正則表達式不夠准確,於是就要修改正則表達式,但是正則表達式一旦修改了,之前所有對應的超鏈接都要修改,真是一件麻煩的事情,而且可能還會漏掉一些超鏈接忘記修改,有辦法讓鏈接根據正則表達式動態生成嗎? 就是用反向解析的辦法。

應用范圍:模板中的超鏈接 、視圖中的重定向

使用方法:

  • 定義url時,需要為include定義namespace屬性,為url定義name屬性
  • 使用時,在模板中使用url標簽,在視圖中使用reverse函數,根據正則表達式動態生成地址,減輕后期維護成本。

1,創建urls

from django.urls import path,include,re_path
from myapp.d2_views import Index
from myapp.d3_views import Avgage
from django.views.generic import TemplateView
from myapp.d11_view import Test,Testrev,TestrevDict

#聲明命名空間
app_name = 'myapp'

urlpatterns = [
    path('',TemplateView.as_view(template_name='index.html')),
    path("avgage",Avgage.as_view()),
    path("test",Test.as_view()),
    #反向解析 第二個參數,制定命名
    re_path("^test_rev_(.+?)$",Testrev.as_view(),name="test_name"),
    #kwargs
    re_path("^test_dict_(?P<username>.+?)$",TestrevDict.as_view(),name="test_name_dict")
]

2,創建templates(index.html)

<a href="test">正向解析</a>
    {# 第一個參數命名空間 第二個自定義命名 456表示需要傳遞的參數#}
    <a href="{% url 'myapp:test_name' 456 %}">反向解析</a>
    <a href="{% url 'myapp:test_name_dict' username=55 %}">反向解析(kwargs)</a>

3,創建視圖(views.py)

from django.http import HttpResponse,HttpResponseRedirect
from django.views import View
from myapp.models import Student
from django.shortcuts import redirect,render
#導入方向解析方法
from django.urls import reverse #定義類視圖
class Test(View):
    def get(self,request):
        # 第一個參數命名空間 第二個自定義命名 
        return redirect(reverse('myapp:test_name_dict',kwargs={'username':66}))
        return redirect(reverse('myapp:test_name',args=(789,)))
        return HttpResponseRedirect(reverse('myapp:test_name'))
        return HttpResponse('正向解析')

#定義反向解析方法
class Testrev(View):
    def get(self,request,p1):
        print(p1)
        return HttpResponse('反向解析')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM