Django - 表单模板标签如何工作?
Django - How do form template tags work?
这是一个简单的问题,但我找不到答案。 django docs 显示以下示例,仅使用 {{ form }}
在模板中调用表单:
<form action="/your-name/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
如果我没有遗漏某些内容,这并不能完全解释模板中 {{ form }}
标记的工作原理。
我这里有一些代码片段,它们显示了我的表单标签遇到的问题,目前 returns 空白:
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}}
只是猜测。
{{ form }}
不是模板标签,它是上下文变量。默认情况下 Form
个实例使用 Form.as_table()
method. So you have to pass such variable to the template in the 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 章节中对表单的完整解释。
这是一个简单的问题,但我找不到答案。 django docs 显示以下示例,仅使用 {{ form }}
在模板中调用表单:
<form action="/your-name/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
如果我没有遗漏某些内容,这并不能完全解释模板中 {{ form }}
标记的工作原理。
我这里有一些代码片段,它们显示了我的表单标签遇到的问题,目前 returns 空白:
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}}
只是猜测。
{{ form }}
不是模板标签,它是上下文变量。默认情况下 Form
个实例使用 Form.as_table()
method. So you have to pass such variable to the template in the 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 章节中对表单的完整解释。