我有一个修改过的Django登录表单,我必须使用像这个{% crispy formname formname.helper %}
这样的长模型在模板文件中处理它。我不能使用短版本({% crispy form %}
),因为我必须区分多个表单。问题是,所有这些都适用于普通表单,而不是修改过的Django登录表单。
代码是这样的:
forms.py
from crispy_forms.helper import FormHelper
from django.contrib.auth.forms import AuthenticationForm
class LoginForm(AuthenticationForm):
def __init__(self, *args, **kwargs):
super(LoginForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = 'login-form'
self.helper.form_show_labels = False
self.helper.layout = Layout(
Field('username', placeholder="E-mail"),
Field('password', placeholder="Password")
)
self.helper.add_input(Submit('submit', 'Log in', css_class='btn-block btn-inset'))
views.py
from django.contrib.auth import authenticate, login as auth_login, REDIRECT_FIELD_NAME
from django.contrib.auth.views import login as django_login
from accounts.forms import LoginForm
from django.http import HttpResponseRedirect
def login(request):
if request.user.is_authenticated():
return HttpResponseRedirect('/profiles/create/')
else:
response = django_login(request, template_name='accounts/login.html', authentication_form=LoginForm)
return response
当我试图以{% crispy response response.helper %}
的形式在模板中处理它时,我只得到一个声明VariableDoesNotExist at /accounts/whateverurl/: Failed lookup for key [response]
的错误。
我该怎么处理呢?
Django 1.6
编辑:
当我想从那个特定的视图调用登录表单时,这个解决方案是有效的,但是当我试图从概要文件/views.py调用它时,就不起作用了。
配置文件/views.py如下所示:
from django.contrib.auth import authenticate, login as auth_login, REDIRECT_FIELD_NAME
from django.contrib.auth.views import login as django_login
from django.views.generic import DetailView
from accounts.forms import LoginForm, RegisterForm
from accounts.views import get_redirect_url
class ProfileView(DetailView):
model = Profile
def get(self, request, *args, **kwargs):
#lots of irrelevant code#
if request.user.is_authenticated():
pass
else:
login_form = django_login(request, template_name='accounts/login.html', authentication_form=LoginForm).render()
#lots of irrelevant code#
context.update({
#lots of irrelevant code#
'login_form': login_form,
})
我甚至需要更新login_form的上下文吗?不管怎样,像这样使用它,我得到了相同的VariableDoesNotExist at /profiles/whateverurl/: Failed lookup for key [form]
。
当我将{% crispy form form.helper %}
替换为{% crispy login_form login_form.helper %}
时,我会得到VariableDoesNotExist at /profiles/whateverurl/: Failed lookup for key [helper]
。
我还试图将工作视图克隆到概要文件/views.py中,它确实可以工作,但只能独立工作。如果我将新登录视图的模板include
到ProfileView的模板中,它将返回上面所示的错误。
发布于 2015-06-29 15:05:54
Django在模板上下文中的登录视图包括登录表单为form
。因此,您应该使用:
{% crispy form form.helper %}
发布于 2015-06-29 15:08:40
response = django_login(request, template_name='accounts/login.html', authentication_form=LoginForm)
是一个视图,其上下文中的表单变量名为form
。
context = {
'form': form,
...
}
因此,您必须使用
{% crispy form form.helper %}
https://stackoverflow.com/questions/31118718
复制相似问题