Django从理论到实战(part14)--url反转
生活随笔
收集整理的這篇文章主要介紹了
Django从理论到实战(part14)--url反转
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習筆記,僅供參考,有錯必糾
參考自:Django打造大型企業官網;
本系列Blog以應用為主,理論基礎部分我在后端專欄的Django系列博客已經寫過了,如果有些需要補充的知識點,我會在這個系列中,盡量詳細的寫一下。
url反轉
之前我們都是通過url來訪問視圖函數,有時候我們知道這個視圖函數,但是想反轉回他的url,這時候就可以通過reverse來實現。
例如,我們在front應用的urls.py中定義路由:
from django.urls import path from . import viewsapp_name = 'front'urlpatterns = [path('', views.index),path('login/', views.login, name = "signin"), ]在cms應用的urls.py中定義路由:
app_name = 'cms'urlpatterns = [path('', views.index),path('login/', views.login, name = "signin"), ]在front應用的views.py模塊中定義一個視圖函數:
def index(request):username = request.GET.get("username", "")if username:return HttpResponse("front首頁")else:login_url = reverse('cms:signin')#利用url的name參數反轉得到相應的urlprint("-+"*15)print(login_url)print("-+"*15)return redirect(login_url)向http://127.0.0.1:8000/front/發起請求后,控制臺的輸出:
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /cms2/login/ -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+如果這個url中需要傳遞參數,那么可以通過reverse函數中的kwargs來傳遞參數。
例如,我們在front應用的urls.py中定義路由:
from django.urls import path from . import viewsapp_name = 'front'urlpatterns = [path('show/<show_id>/', views.show, name = "show"),path('test/', views.test, name = "test"), ]在views.py模塊中我們定義一個視圖函數test:
def show(request, show_id):return HttpResponse("ID為:{}".format(show_id))def test(request):username = request.GET.get("username", "")if username: return HttpResponse("測試頁面")else:login_url = reverse('front:show', kwargs={"show_id":1})#利用url的name參數反轉得到相應的urlprint("-+"*15)print(login_url)print("-+"*15)return redirect(login_url)向http://127.0.0.1:8000/front/test/發起請求后,控制臺的輸出:
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ /front/show/1/ -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+同時,由于django中的reverse函數反轉url時,不區分GET請求和POST請求,因此不能在反轉的時候添加查詢字符串的參數。
如果想要添加查詢字符串的參數,只能手動的添加,例如:
login_url = reverse('login') + "?next=/"總結
以上是生活随笔為你收集整理的Django从理论到实战(part14)--url反转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菜鸟裹裹怎么切换家乡版
- 下一篇: ChatGPT 上线联网和插件功能,Pl