2013-12-20 85 views
4

有关Django的酥脆形式,我不断收到VariableDoesNotExist at /Failed lookup for key [form] in u'[{\'False\': False, \'None\': None,.....脆皮形式VariableDoesNotExist Django上

{% extends 'base.html' %} 
{% load crispy_forms_tags %} 

{% block loginForm %} 
    <div class="container" style="padding-bottom: 70px;"> 
     <div class='row'> 
      <div class='col-md-6 col-md-offset-3'> 
       <div class="well"> 
        <legend>Sign in</legend> 
        <form method="post" action="{% url 'django.contrib.auth.views.login' %}" class="form-horizontal"> 
         {% crispy form %} 
         <input type="hidden" name="next" value="{{ next }}"/> 
        </form> 
       </div> 
      </div> 
     </div> 
    </div> 

{% endblock loginForm %} 

forms.py:

from django import forms 
from crispy_forms.helper import FormHelper 
from crispy_forms.layout import Layout, Div, Submit, HTML, Button, Row, Field, Hidden, Fieldset 
from crispy_forms.bootstrap import AppendedText, PrependedText, FormActions 
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 = 'form-horizontal' 
     self.helper.label_class = 'col-lg-2' 
     self.helper.field_class = 'col-lg-8' 
     self.helper.form_tag = False 
     self.helper.layout = Layout(
      Field('username', placeholder="username", css_class='input-xlarge'), 
      Field('password', placeholder="Password", css_class='input-xlarge'), 
      FormActions(
       Submit('login', 'Login', css_class="btn-primary"), 
      ) 
     ) 

我不明白,因为根据文件我使用FormHelper属性帮助器,所以我应该可以使用{%crispy form%}

+0

请问你的看法是什么样子? – sk1p

+0

对不起,哪个视图?我对这个课程没有看法,这是在forms.py – dman

+0

这个类如果你没有视图,你如何渲染你的模板?这是无意义的。 –

回答

8

crispy模板标签的第一个参数是n其中Crispy Forms期望Form实例的上下文变量的ame。所以你需要以某种方式在你的模板上下文中获得一个Form实例。如果你在一个视图中使用这种形式,你可以不喜欢

def yourview(request): 
    return TemplateResponse(request, "yourtemplate.html", {'form': LoginForm()}) 

如果你想有许多不同的页面这种形式,我建议一个inclusion tag

@register.inclusion_tag('path/to/login_form.html') 
def display_login_form(): 
    return {'form': LoginForm()} 

而且在模板:

{% load your_template_tags %} 
{% display_login_form %} 

(见the usual setup procedure for custom template tags

1

我碰到VariableDoesNotExist问题以及Failed lookup for key [form],但对我来说,问题是我错误地使用generic.DetailView作为基类,而不是generic.UpdateView

更改为UpdateView解决了问题。

class MyUpdateView(generic.UpdateView): 

    template_name = "object_update.html" 
    model = MyModel 
    form_class = MyCreateForm