我正在尝试使用引导程序模式进行登录,以便可以通过带有登录弹出窗口的导航栏从任何页面进行访问。 现在的问题是,如何传递该表格,以便所有页面都可以访问它?目前,我收到此错误:
/
处的BootstrapError参数“表单”应包含有效的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)的一个答案,该答案看起来很有希望,但无法使它起作用。
感谢小费。
更新: 这是LoginForm
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
....
答案 0 :(得分:1)
您已将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