[英]Django and urls.py: How do I HttpResponseRedirect via a named url?
我正在編寫一個基於成員的Web應用程序,我需要能夠在登錄后重定向頁面。 我想在我的views.py文件中使用我的urls.py腳本中的命名url作為登錄應用程序,但我不能為我的生活找出該怎么做。 我有的是這個:
def login(request):
if request.session.has_key('user'):
if request.session['user'] is not None:
return HttpResponseRedirect('/path/to/page.html')
我想要完成的是:
def login(request):
if request.session.has_key('user'):
if request.session['user'] is not None:
return HttpResponseRedirect url pageName
我執行此操作時出現語法錯誤,有什么想法嗎?
您需要使用reverse()
utils函數。
from django.urls import reverse
# or Django < 2.0 : from django.core.urlresolvers import reverse
def myview(request):
return HttpResponseRedirect(reverse('arch-summary', args=[1945]))
args
滿足url正則表達式中的所有參數。 您還可以通過傳遞字典來提供命名的args。
從Django 1.3開始 ,redirect方法隱式地進行反向調用的正確答案是:
from django.shortcuts import redirect
def login(request):
if request.session.get('user'):
return redirect('named_url')
寫一個if語句就是if request.session.get('user')
的更簡潔的方法。 has_key現在已棄用,而.get()返回None(默認情況下,可通過傳遞第二個參數來更改)。 因此將其與Soviut的回復結合起來:
from django.core.urlresolvers import reverse
def login(request):
if request.session.get('user'):
return HttpResponseRedirect(reverse('my-named-url'))
from django.core.urlresolvers import reverse
from django.shortcuts import redirect
def login(request):
if request.session.get('user'):
return redirect(reverse('name-of-url'))
另請參閱https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.