Django 和 urls.py:如何通过命名 url 进行 HttpResponseRedirect?

发布于 2024-07-29 22:25:58 字数 526 浏览 6 评论 0原文

我正在编写一个基于会员的 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

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

I'm writing a member-based web application, and I need to be able to redirect the page after login. I want to use the named url from my urls.py script in my views.py file for the login application, but I can't for the life of me figure out what to do. What I have is this:

def login(request): 
if request.session.has_key('user'):
    if request.session['user'] is not None:
        return HttpResponseRedirect('/path/to/page.html')

What I want to accomplish is something like:

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

I get syntax errors when I execute this, any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

红焚 2024-08-05 22:25:58

if 语句的更简洁编写方式是 if request.session.get('user')。 has_key 现在已被弃用,并且 .get() 返回 None (默认情况下,可以通过传递第二个参数进行更改)。
因此,将其与苏联的答复结合起来:

from django.core.urlresolvers import reverse

def login(request): 
    if request.session.get('user'):
         return HttpResponseRedirect(reverse('my-named-url'))

A more concise way to write that if statement would be if request.session.get('user'). has_key is deprecated nowadays, and .get() returns None (by default, changeable by passing a second parameter).
So combining this with Soviut's reply:

from django.core.urlresolvers import reverse

def login(request): 
    if request.session.get('user'):
         return HttpResponseRedirect(reverse('my-named-url'))
救赎№ 2024-08-05 22:25:58

您需要使用 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 正则表达式中的所有参数。 您还可以通过传递字典来提供命名参数。

You need to use the reverse() utils function.

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]))

Where args satisfies all the arguments in your url's regular expression. You can also supply named args by passing a dictionary.

孤檠 2024-08-05 22:25:58

正确答案来自 Django 1.3 开始,其中重定向方法隐式执行反向调用,是:

from django.shortcuts import redirect

def login(request):
    if request.session.get('user'):
        return redirect('named_url')

The right answer from Django 1.3 onwards, where the redirect method implicitly does a reverse call, is:

from django.shortcuts import redirect

def login(request):
    if request.session.get('user'):
        return redirect('named_url')
请爱~陌生人 2024-08-05 22:25:58
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

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'))

Also see https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文