Django包括不包含内容

时间:2013-07-08 18:05:33

标签: django forms templates tags include

我想使用{% include %}在页面上包含第二个表单,但表单是空的。

views.py:

def year_form(request):
    thing_list = Thing.objects.all()
    if request.method == 'POST':
        form = YearBrowseForm(request.POST)
        if form.is_valid():
            year = form.cleaned_data['year']
            return HttpResponseRedirect(reverse('browse_years', kwargs={'year':year}))
    else:
        form = YearBrowseForm()
    return render(request, 'browse-year.html', {'form':form, 'thing_list':thing_list})

forms.py:

class YearBrowseForm(forms.Form):
    year = forms.ChoiceField(choices=YEARS_EMPTY, widget=forms.Select(attrs={'onchange': 'this.form.submit();'}))

url:

url(r'^browse/years/(?P<year>\d+)/$', 'my_app.views.browse.year_form', name='browse_years'),

HTML:

{% extends 'base.html' %}
{% block content %}
{% include 'browse-year.html' %}
{% endblock %}

浏览-year.html:

<form action='' method='post' enctype='multipart/form-data'>
  {{ form.as_p }}
  {% csrf_token %}
</form>

这会呈现一个空表单(即源表明正在包含表单,但它没有内容)。我在这里错过了什么?这是this question的延续,我试图通过使用{% include %}以不同的方法解决这个问题。谢谢你的想法!

1 个答案:

答案 0 :(得分:0)

这是因为您正在渲染browse-year.html

return render(request, 'browse-year.html', {'form':form, 'thing_list':thing_list})

你应该渲染另一个html,一个你没有给出名字的html,但是以

开头
{% extends 'base.html' %}

只能通过渲染你扩展基础的那个,然后出现其他内容。