Sve*_*len 2 forms django modelform
我想分别解析我的Modelform的字段而不是for循环.我想要一些字段来解析该元素的Django HTML.我有这个:
<form action="#" method="POST" name="notifictaionForm">
<ul>
<li><label>{{ form.fields.title.label }}</label> <span>{{ notification.title }}</span></li>
<li><label>{{ form.fields.create_date.label }}</label> <span>{{ notification.create_date }}</span></li>
<li><label>{{ form.fields.description.label }}</label> <span>{{ notification.description }}</span></li>
<li><label>{{ form.fields.status.label }}</label> <span>{{ form.fields.status.??? }}</span></li>
</ul>
</form>
Run Code Online (Sandbox Code Playgroud)
所以我可以解析字段的名称而不是HTML元素,我想在???
模板代码中解析Django HTML表单元素.
有人知道怎么做吗?
如果我很了解你,你想要django自动生成的html status
字段吗?那很简单:
{{ form.status }}
Run Code Online (Sandbox Code Playgroud)
几句额外的话:
Form是类似dict的对象,可以像这样访问字段:
>>> form['field_name']
Run Code Online (Sandbox Code Playgroud)
声明的字段被存储在form.fields
,一个SortedDict对象.因此,您可以使用此变量来访问字段,但建议的方法始终是最短的方式.
如果您不熟悉Python,您可能想知道如何将字段声明为属性,但是您无法从python代码中访问它们,如下所示:
>>> form.field_name
AttributeError: 'Form' object has no attribute 'field_name'
Run Code Online (Sandbox Code Playgroud)
好吧,因为python中的类不是静态的,元类可以用于构建类定义之外的所有类型的新东西.Django利用它来创建一个友好的API.基本上它是这样的:
__metaclass__
继承自的属性django.forms.Form
并将其设置为:DeclarativeFieldsMetaclass..base_fields
属性并创建属性.base_fields
不fields
呢?嗯,这是另一个故事,这与如何将来自模型中的模型的字段与表单类中声明的字段分开.但是,不要将元类与class Meta
有时用于为表单或模型提供附加配置选项的元类混淆.
现在回到模板.您无法form.field_name
从python代码访问,为什么在模板中可以实现?如django文档中所述,当模板系统遇到点时,它会按以下顺序尝试以下查找:
这意味着模板系统在遇到时会首先尝试返回:{{ form.field_name }}
是:form['field_name']
.
归档时间: |
|
查看次数: |
2174 次 |
最近记录: |