为什么我重定向到登录页面精简版时会得到RemovedInDjango110Warning?

时间:2016-04-18 15:01:21

标签: django django-views

对于我的索引页面,如果用户已登录,我想显示一个页面,如果用户未登录则重定向到登录页面。我使用以下视图代码执行此操作:

from __future__ import unicode_literals
from django.shortcuts import render_to_response, redirect
from django.contrib.auth.views import login

def index(request):
    if not request.user is None and request.user.is_authenticated():
        return render_to_response('foo/index.html')
    else :
        return redirect(login)

但是我收到以下警告:

RemovedInDjango110Warning: Reversing by dotted path is deprecated (django.contrib.auth.views.login)

我在这个主题上找到的所有内容都是this question但是虽然看起来模糊不清,但我无法理解如何将它应用到我的问题中。 “通过虚线路径反转”是什么意思?我该怎么办呢?应该怎么做呢?

编辑:我认为这些问题出现了问题,但似乎并非如此。所以问题仍然相似但更为笼统:

“通过虚线路径反转”是什么意思?我怎么知道我在哪里做?应该做些什么呢?

1 个答案:

答案 0 :(得分:1)

我同意在这种情况下,“通过虚线路径反转”信息有点令人困惑。

说你有:

url(r'^login/$', views.login, name='login-page'),

弃用警告表示您在撤消网址时应使用网址名称'login-page'而不是虚线路径'django.contrib.auth.views.login'

在您的情况下,当您使用redirect快捷方式时,您正在撤消网址。当你这样做

    return redirect(login)

可调用登录名转换为字符串'django.contrib.auth.views.login',字符串被反转,触发警告。

您可以通过将该行更改为:

来停止警告
    return redirect('login-page')

如果在其他地方没有使用from django.contrib.auth.views import login,您可以将其删除。

请注意,撰写视图的惯用方法是使用login_requiredrender

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@login_required
def index(request):
    return render(request, 'foo/index.html')