使用带有ListView

时间:2015-08-20 15:23:21

标签: python django forms listview django-crispy-forms

我是Python和Django的新手,但我想要做的是在我的一个模板中使用Crispy Form,该模板加载了ListView类型的视图。我通常从UpdateView加载我的所有其他模板,它们提供了Crispy所需的一切。我无法更改此处的视图类型,因此我必须坚持使用ListView,但是当我尝试加载表单时,Crispy无法找到它。我不知道如何手动将表单提供给模板。

这是我到目前为止所做的:

我的模板:

{% extends "base.html" %}
{% load crispy_forms_tags %}
{% load i18n %}
{% load tz %}

  {% block content %}

  {% crispy form %}

  <!-- template content -->      

  {% endblock %}

我的form.py

class UserBirthdayForm(forms.ModelForm):
    birth_day = forms.IntegerField(required=True, localize=True, label=_('*My birth day'))
    birth_month = forms.IntegerField(required=True, localize=True, label=_('*My birth month'))
    birth_year = forms.IntegerField(required=True, localize=True, label=_('*My birth year'))

    def __init__(self, *args, **kwargs):
        super(UserForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.layout = Layout(
            Div(
                Div('birth_day', css_class='col-sm-4'),
                Div('birth_month', css_class='col-sm-4'),
                Div('birth_year', css_class='col-sm-4'),
                css_class='row'
            ),
            Submit('save', _('update'), css_class='pull-right'),
        )

    class Meta():
        model = User

        fields = ("birth_day", "birth_month", "birth_year")

我的view.py:

class MissionList(LoginRequiredMixin, ListView):
    form_class = UserBirthdayForm

    def get_queryset(self):
        #some other stuff
        return queryset

    def get_context_data(self, **kwargs):
        #some other stuff
        return context

以下是我在尝试访问该页面时从Django获得的错误:

VariableDoesNotExist: Failed lookup for key [form] in u"[some other stuff]"

1 个答案:

答案 0 :(得分:1)

get_context_data中创建表单实例并将其添加到上下文中。

def get_context_data(self, **kwargs):
    #some other stuff — where you create `context`

    context["form"] = UserBirthdayForm()

    return context