Django和urls.py:我如何通过一个名为url的HttpResponseRedirect?

Ako*_*exx 26 python django redirect django-urls

我正在编写一个基于成员的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')
Run Code Online (Sandbox Code Playgroud)

我想要完成的是:

def login(request): 
if request.session.has_key('user'):
    if request.session['user'] is not None:
        return HttpResponseRedirect url pageName
Run Code Online (Sandbox Code Playgroud)

我执行此操作时出现语法错误,有什么想法吗?

Sov*_*iut 43

您需要使用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]))
Run Code Online (Sandbox Code Playgroud)

哪里args满足你的网址正则表达式中的所有参数.您还可以通过传递字典来提供命名args.


Rob*_*ant 13

Django 1.3开始,redirect方法隐式地进行反向调用的正确答案是:

from django.shortcuts import redirect

def login(request):
    if request.session.get('user'):
        return redirect('named_url')
Run Code Online (Sandbox Code Playgroud)

  • 此外,如果您在项目中使用命名应用程序,则语法为`redirect('appName:urlName')` (3认同)

AKX*_*AKX 7

写一个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'))
Run Code Online (Sandbox Code Playgroud)