django - Django modal loginview - 错误:“表单”应包含有效的 Django 表单
问题描述
我正在尝试使用引导模式登录,以便可以使用登录弹出窗口通过我的导航栏从任何页面访问它。现在的问题是如何传递该表单以便所有页面都可以访问它?目前我收到此错误:
引导错误在 /
参数“form”应该包含一个有效的 Django 表单。
我现在没有为我的登录表单使用单独的页面,而是:
login3.html
{% load bootstrap3 %}
<div class="modal fade" id="login-modal" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header" align="center">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
</button>
</div>
<div id="div-forms">
<form id="login-form" action="{% url 'login3' %}" method="post"
enctype="multipart/form-data">
{% csrf_token %}
<div class="modal-body">
{% bootstrap_form form %}
</div>
<div class="modal-footer">
{% buttons %}
<button type="submit" class="btn btn-primary">Login</button>
{% endbuttons %}
</div>
</form>
</div>
</div>
</div>
</div>
看法:
class Login3View(NextUrlMixin, RequestFormAttachMixin, FormView):
form_class = LoginForm
template_name = 'accounts/login3.html'
success_url = '/'
default_next = '/'
然后我只是将模板 login3.html 与我的导航栏一起包含在内,以便在每个页面上加载表单。
我在另一个问题上看到了来自 C14L 的答案(Django login from in modal window),看起来很有希望,但无法让它发挥作用。
感谢任何提示。
更新:这是登录表单
class LoginForm(forms.Form):
email = forms.EmailField(label='Email')
password = forms.CharField(widget=forms.PasswordInput)
def __init__(self, request, *args, **kwargs):
self.request = request
super(LoginForm, self).__init__(*args, **kwargs)
def clean(self):
request = self.request
data = self.cleaned_data
email = data.get("email")
password = data.get("password")
qs=User.objects.filter(email=email)
if qs.exists():
#user email is registered, check active/email activation
not_active = qs.filter(is_active=False)
if not_active.exists():
#not active, check email activation
....
解决方案
您已将request
参数添加到您的LoginForm
:
class LoginForm(forms.Form):
# ...
def __init__(self, request, *args, **kwargs):
self.request = request
super(LoginForm, self).__init__(*args, **kwargs)
您需要修补get_form_kwargs
函数,以便在初始化表单时添加参数request
:
class Login3View(NextUrlMixin, RequestFormAttachMixin, FormView):
form_class = LoginForm
template_name = 'accounts/login3.html'
success_url = '/'
default_next = '/'
def get_form_kwargs(self, *args, **kwargs):
kwargs = super().get_form_kwargs(*args, **kwargs)
kwargs['request'] = self.request
return kwargs
推荐阅读
- python - 在 tf.keras 中,相同样本的特征与不同样本的特征之间的余弦相似度和欧几里得距离几乎相同
- python - 如何在 Python 中从文件中导入多个矩阵
- php - 提取两个方括号内的数字
- javascript - useState 的问题(使用渲染复制数组) - ReactJS
- wordpress - 为什么单击主页 wordpress 时找不到 404
- java - 将 ByteArray 拆分为大小为 1024bytes 的块(每个块应为 byteArray),在 Java 中再次将所有块合并为 ByteArray
- windows - 将依赖于 dll 的运行时加载插件部署 - 将该 dll 放在哪里?
- javascript - 如何在 React Native 中 3 秒后隐藏顶部栏
- php - 如何连接用逗号分隔的php数组
- security - HttpAuthenticationMechanism 是可分发的吗?