Django - 表单模板标签如何工作?

时间:2015-03-08 10:11:49

标签: django django-forms django-templates

这是一个简单的问题,但我找不到答案。 django docs显示以下示例,仅使用{{ form }}调用模板中的表单:

<form action="/your-name/" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>

如果我没有遗漏某些内容,这并不能完全解释模板中{{ form }}标记的工作原理。

我的代码片段在这里显示了我的表单标签的问题,目前返回空白:

forms.py

class addtaskForm(forms.ModelForm):
    task_name = forms.CharField(label='task_name')
    priority = forms.ChoiceField(choices=PRIORITY_CHOICES)

views.py

def add_task(request):
    if request.method == "POST":
        return HttpResponse("works!")

urls.py

url(r'^add_task/$', 'todo.views.add_task', name='add_task')

参见tasks.html

<form id="add_task" action="/add_task/" method="post">
    {% csrf_token %}
    {{ add_task_form }}
    <input type="submit" value="submit">
</form>

{{add_task_form}}只是猜测。

1 个答案:

答案 0 :(得分:3)

{{ form }}不是模板标记,它是一个上下文变量。默认情况下,使用Form.as_table()方法呈现Form个实例。因此,您必须将此类变量传递给render()调用中的模板:

from django.shortcuts import render

def add_task(request):
    if request.method == "POST":
        form = addtaskForm(request.POST)
        if form.is_valid():
            # do something useful and redirect
    else:
        form = addtaskForm()
    return render(request, 'tasks.html', {'add_task_form': form})

我建议您仔细阅读django文档Working with forms章节中表格的完整说明。