在包含 [重复] 的情况下,视图必须是可调用的或列表元组

Posted

技术标签:

【中文标题】在包含 [重复] 的情况下,视图必须是可调用的或列表元组【英文标题】:views must be a callable or a list\tuple in case of include [duplicate] 【发布时间】:2017-08-14 04:12:18 【问题描述】:

Django==1.10.5 登录。 我已经制作了登录表单,然后编写了这些代码并想运行服务器

Urls.py:

    urlpatterns = [
        #previous login view
        #url(r'^login/$', views.user_login, name='login'),
        #login/logout urls
        url(r'^$', views.dashboard, name='dashboard'),

        url(r'^login/$', 'login', name='login'),
        url(r'^logout/$', 'django.contrib.auth.views.logout', name='logout'),
        url(r'^logout-thenlogin/$','django.contrib.auth.views.logout_then_login', 
            name='logout_then_login'),

]

Views.py:
from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
from .forms import LoginForm



def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            user = authenticate(username=cd['username'], password=cd['password'])
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponse('Authenticated successfully')
                else:
                    return HttpResponse('Disabled account')
            else:
                return HttpResponse('Invalid login')
    else:
        form = LoginForm()
    return render(request, 'account/login.html', 'form': form)

@login_required
def dashboard(request):
    return render(request, 'account/dashboard.html', 'section': 'dashboard')

当我想运行服务器时,我收到了这条消息: 在包含的情况下,视图必须是可调用的或列表\元组

【问题讨论】:

【参考方案1】:

Django 1.10+ 不再允许您在 URL 模式中将视图指定为字符串(例如“myapp.views.home”)。

解决方案是更新您的 urls.py 以包含可调用的视图。这意味着您必须在 urls.py 中导入视图。如果您的 URL 模式没有名称,那么现在是添加名称的好时机,因为使用点分 Python 路径进行反转不再有效。

urlpatterns = [
        #previous login view
        #url(r'^login/$', views.user_login, name='login'),
        #login/logout urls
        url(r'^$', views.dashboard, name='dashboard'),

        url(r'^login/$', your_app_name.views.user_login, name='login'),
        url(r'^logout/$', django.contrib.auth.views.logout, name='logout'),
        url(r'^logout-thenlogin/$', django.contrib.auth.views.logout_then_login, 
            name='logout_then_login'),

]

【讨论】:

实际上我没有得到,对不起,我是初学者——这就是我无法得到你的原因。我应该从视图中导入 user_login 吗? 是的,你必须从视图中导入 user_login 或者你可以只写 url(r'^login/$', appname.views.user_login, name='login') urlpatterns = [ #previous login view #url(r'^login/$', views.user_login, name='login'), #login/logout urls url(r'^$', views.dashboard, name='dashboard'), url(r'^login/$', views.user_login, name='login'), #url(r'^logout/$', 'django.contrib.auth. views.logout', name='logout'), #url(r'^logout-then-login/$','django.contrib.auth.views.logout_then_login', name='logout_then_login'), 当我取消注释 logout 和 logout-thenlogin-我有同样的问题 感谢罗希特乔普拉。我按照你写的做了。

以上是关于在包含 [重复] 的情况下,视图必须是可调用的或列表元组的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:在 include().hh 的情况下,视图必须是可调用的或列表/元组 [重复]

Python Django |在 include() 的情况下,视图必须是可调用的或列表/元组 [重复]

TypeError:包含另一个urls.py时,视图必须是可调用的或列表/元组[重复]

Django 错误遵循教程 b/c 使用 3.1 而不是 1.9 TypeError:在 include() 的情况下,视图必须是可调用的或列表/元组 [重复]

类型错误:在 include().django2.2.2 的情况下,视图必须是可调用的或列表/元组

Django CMS 不适用于 uWSGI