我有这个 Django 代码示例:
# views.py
def test_view(request):
form = TestForm(
request.POST or { 'text': 'some text'},
)
data = {
'form': form,
}
print 'before rendering'
return render(request, 'test.html', data)
# forms.py
class TestForm(forms.Form):
text = forms.CharField()
def __init__(self, *args, **kwargs):
print 'init'
super(TestForm, self).__init__(*args, **kwargs)
def clean(self):
print 'in clean'
这个模板:
#test.html
<form id='test-form' method="post" action="some url" enctype="multipart/form-data">
{{ form.as_p }}
<input type="submit" value="Save"/>
</form>
当我向这个文件发送获取请求时,我在控制台中有这个输出:
在以清洁方式渲染
init之前
当我写 {{ form.text }} 而不是 {{ form.as_p }} 我只有:
在渲染
初始化之前
我觉得 as_p 方法在渲染模板的过程中内部调用了 clean() 。在此之前我提到过 as_p 方法只是某种快捷方式(我理解它是 Form 类的方法),并没有实现逻辑。
为什么会这样?它是一个错误还是一些有用的功能?
Django 版本==1.5.1