【问题标题】:Django - How do form template tags work?Django - 表单模板标签如何工作?
【发布时间】:2015-03-08 10:11:49
【问题描述】:

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

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

如果我没有遗漏什么,这并不能完全解释模板中的 {{ form }} 标记是如何工作的。

我在这里有一些我的代码的 sn-ps,它显示了我的表单标签当前返回空白的问题:

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}} 只是一个猜测。

【问题讨论】:

    标签: django django-forms django-templates


    【解决方案1】:

    {{ form }} 不是模板标签,它是上下文变量。默认情况下,Form 实例使用Form.as_table() 方法呈现。因此,您必须在 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章节中表格的完整解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2014-08-06
      • 1970-01-01
      • 2012-06-23
      • 2013-03-31
      相关资源
      最近更新 更多