python – 在django视图中访问表单字段作为属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在django视图中访问表单字段作为属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1536字,纯文字阅读大概需要3分钟。
内容图文
根据Django教程,您应该使用cleaning_data字典访问表单字段.我想知道为什么我不能直接访问表单的属性?我的表单验证很好,但是当我尝试访问它时,Django抱怨该对象没有该属性.我在下面添加了一些代码,希望能帮助诊断问题.
形成:
class CustomForm(forms.Form):
description = forms.CharField(widget = forms.TextInput(attrs = {'placeholder' : 'enter some text'}), label = "My form")
视图:
def process_form(request):
if request.method != 'POST':
raise Http404
myForm = CustomForm(request.POST)
if not myForm.is_valid():
c = RequestContext(request)
return render_to_response('home/index.html', {'form' : myForm }, c)
# debug
print 'Description: ' + myForm.description # this does NOT work
# print 'Description: ' + myForm.cleaned_data['description'] # this does work
我收到以下错误:’CustomForm’对象没有属性’description’.我是否遗漏了文档中的某些内容,说我不能这样做?
解决方法:
使用django.forms定义字段的方式只是一种方便的声明性语法;它并不能真正代表最终的Form类或它的实例在属性方面的表现.
表单有一个metaclass(没有深入到它,一个元类是使用class关键字声明一个类作为__init__方法是使用括号创建一个类的实例 – 一个钩子来定制正在创建的对象,其中在元类的情况下,是一个类!),它在定义时从表单类中选择Fields,并将它们添加到base_fields dict中.实例化表单时,会将其base_fields深度复制到实例上的fields属性.
一点困惑可能是你使用.访问字段以便在模板中显示 – 实际上发生的事情是Django的模板引擎首先尝试使用字典样式[]访问来解析属性查找,而基本表单类定义了一个__getitem__方法来利用这一点,查找表单实例的字段中的适当字段用字符表示并用BoundField包装它,这个包装器知道如何使用字段和表单中的数据来显示字段.
内容总结
以上是互联网集市为您收集整理的python – 在django视图中访问表单字段作为属性全部内容,希望文章能够帮你解决python – 在django视图中访问表单字段作为属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。