xtj2017 2019-07-30 18:06 采纳率: 0%
浏览 406

为什么会报TypeError at /users/login/ 'function' object is not iterable?

参照“python编程从入门到实践”书中19章进行账号登录页编写,报如下错,百思不得其解,请大神们多多指点。

项目 urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('ds_project.urls'), name='ds_project'),
    path('users/', include('users.urls'), name='users'),
    ]

users/url.py

from django.urls import path, include, re_path
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.views import LoginView
from . import views

app_name = 'users'
urlpatterns = [
    # 登录页面
    path('login/', login, LoginView.as_view(template_name='users/login.html'), name='login'),
    ]

templates/users/login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    {% block content %}
        {% if form.errors %}
        <p>用户名和密码不匹配,请重新尝试!</p>
        {% endif %}

        <form method="post" action="{% url 'users:login' %}">
        {% csrf_token %}
        {{ form.as_p }}

        <button name="submit">登录</button>
        <input type="hidden" name="next" value="{% url 'ds_project:index' %}">
        </form>
    {% endblock content %}
</body>
</html>

报错:
TypeError at /users/login/
'function' object is not iterable
Request Method: GET
Request URL: http://127.0.0.1:8000/users/login/
Django Version: 2.2.3
Exception Type: TypeError
Exception Value:

'function' object is not iterable

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-10 21:03
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    根据您提供的信息,错误消息是由于'function' object is not iterable。这通常发生在尝试访问一个函数(在本例中是登录表单)时,它没有返回任何内容或者返回了一个不可迭代对象。

    首先,检查您的LoginView类是否正确实现了__iter__方法。如果它没有实现,那么在<form>标签内部调用request.POST.getlist('username')或类似的操作将会引发此错误。以下是如何修复的示例:

    LoginView类中添加__iter__方法:

    def __iter__(self):
        return iter(self.request.POST.items())
    

    然后,在模板中使用这个方法来获取POST数据:

    <form method="post" action="{% url 'users:login' %}"{% csrf_token %}>
        {% for key, value in request.POST.items() %}
            <div>
                <label for="{{ key }}">{{ key }}</label>
                <input type="text" id="{{ key }}" name="{{ key }}" value="{{ value }}">
            </div>
        {% empty %}
            <p>No values were provided.</p>
        {% endfor %}
        <button name="submit">登录</button>
        <input type="hidden" name="next" value="{% url 'ds_project:index' %}">
    </form>
    

    现在,当用户提交表单时,会成功地处理POST数据并执行相应的逻辑。

    评论

报告相同问题?