我使用allauth通过电子邮件登录,做了一个非常基本的自定义登录表单,并为allauth重写了一个模板,然后显示登录表单。
在[{'True ':正确,"错误":错误,"无":无},{"真":正确,"错误":错误,"无":无,"表格":,"表单显示错误":True,"表单显示标签":真,"标签类":""、"字段类":""},{" for循环":{"父循环":{},"计数器0":1、"反":2、"转速表":2,"转速计数器0":1、"第一":假,"最后":False},"字段":}、{}]
在那里我必须继续调试两次才能在窗体上结束。
我试着寻找这个特定的[html5_required]
标记/密钥,但没有找到任何具有相同丢失密钥的人。
我删除了settings.py
中的自定义登录表单,以查看是否存在问题,但没有帮助。
我甚至用一个只显示两个字段的简单"ModelForm"测试过,也得到了同样的问题。
我两个都试过了:基于类的视图(用于登录)和基于函数的视图(用于配置文件),我在这两个视图上都遇到了同样的问题。
settings.py:
INSTALLED_APPS = [
...
'crispy_forms',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
...
]
CRISPY_TEMPLATE_PACK = 'bootstrap4'
ACCOUNT_FORMS = {
"login": "users.forms.CustomLoginForm"
}
forms.py
from django.utils.translation import ugettext as _
from django.urls import reverse_lazy
from allauth.account.forms import LoginForm, SignupForm
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML
from django.forms import ModelForm
class CustomLoginForm(LoginForm):
def __init__(self, *args, **kwargs):
super(CustomLoginForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
# Add magic stuff to redirect back.
self.helper.layout.append(
HTML(
"{% if redirect_field_value %}"
"<input type='hidden' name='{{ redirect_field_name }}'"
" value='{{ redirect_field_value }}' />"
"{% endif %}"
)
)
# Add password reset link.
self.helper.layout.append(
HTML(
"<p><a class='button secondaryAction' href={url}>{text}</a></p>".format(
url=reverse_lazy('account_reset_password'),
text=_('Forgot Password?')
)
)
)
# Add submit button like in original form.
self.helper.layout.append(
HTML(
'<button class="btn btn-primary btn-block" type="submit">'
'%s</button>' % _('Sign In')
)
)
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-xs-2 hide'
self.helper.field_class = 'col-xs-8'
templates/account/login.html
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<h2>Login</h2>
<form method="post">
{% csrf_token %}
{{ form|crispy }}
<button class="btn btn-primary" type="submit">Login</button>
</form>
{% endblock %}
下面的代码是概要文件的基于快速函数的视图,它使用了几乎相同的模板:
一个三个三个一个
我不明白为什么这个键不见了,是不是我忘了什么东西或者遗漏了某个配置部分?
我正在使用的版本:
- Django :2.2.4
- 平均值:0.39.1
- 松脆型:1.7.2
- Python:3.7.4
任何指导都非常感谢。
- EDIT:**我创建了一个完整的新项目作为测试,它只有简单的表单,一个只有2个字符字段的模型,上面提到的ModelForm和模板,并收到了相同的问题。
所以要么是我做错了什么/遗漏了什么,要么是有问题,我也提出了他们的github问题https://github.com/django-crispy-forms/django-crispy-forms/issues/891
4条答案
按热度按时间csbfibhn1#
我将此作为“部分”答案,因为我不知道为什么或(行为上的)差异是什么,但将模板中对表单的调用从:
到
去掉了异常。
然后,正如@skilled-in-blockchain提到的,我可以将
FormHelper
添加到表单中,以进行其他修改。68bkxrlz2#
请允许我总结一下Github上的问题。很明显,这是VS代码的问题,正如在这个回复中指出的。
1.这个问题可以通过在launch.json文件中设置
"django": false
来解决,但是这将不再允许您调试模板的渲染。换句话说,在模板中设置断点将不再导致调试器执行在这些点暂停。有关在VS代码中调试Django的更多信息,请参见this tutorial。1.正如在另一篇文章中提到的,从:
到这个
也解决了这个问题。但是,这也需要你使用FormHelper来插入按钮,或者id等等。查看crispy form's documentation on the fundamentels如何使用它。
mkshixfv3#
我也有同样的问题。
在基于功能的视图上(对于配置文件)
将以下导入添加到顶部
然后在类定义之后立即创建helper
我做了上面的,它为我解决了这个问题。
3pmvbmvn4#
我遇到了同样的问题(
Failed lookup for key [form] in [{'True': True, 'False': False, 'None': None}, {}, {}]
),并注意到我从Create
类中复制了下面的代码,但从未返回上下文。我一删除
get_context_data
或添加return context
,这个问题就消失了。