簡體   English   中英

Django和urls.py:我如何通過一個名為url的HttpResponseRedirect?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM