Django,如何在没有 for 循环的情况下解析单个表单字段(HTML)

标签 django forms 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>

所以我可以解析字段的名称,但不能解析 HTML 元素,我想在模板代码中的 ??? 处解析 Django HTML 表单元素。

有人知道怎么做吗?

最佳答案

如果我明白你的意思,你想要 django 自动生成 status 字段的 html 吗?那么就很简单了:

{{ form.status }}
<小时/>

几句话:

表单是类似字典的对象,可以像这样访问字段:

>>> form['field_name']

声明的字段存储在form.fields中,a SortedDict目的。因此,您可以使用此变量来访问字段,但推荐的方式始终是最短的方式。

如果您是 Python 新手,您可能想知道如何将字段声明为属性,但无法从 Python 代码中访问它们,如下所示:

>>> form.field_name
AttributeError: 'Form' object has no attribute 'field_name'

因为Python中的类不是静态的,所以元类可以用来从类定义中构建各种新的东西。 Django 利用它来创建一个友好的 API。基本上是这样的:

  1. Python 解释器解析您的 Form 类。
  2. 解释器找到从django.forms.Form继承的__metaclass__属性,并将其设置为:DeclarativeFieldsMetaclass
  3. 元类重组您的类。属性已删除,.base_fields 属性已创建。
  4. 为什么base_fields而不是fields?好吧,这是另一个故事了,这与来自 ModelForm 中模型的字段如何与表单类中声明的字段分离有关。

但不要将元类与 class Meta 混淆,后者有时用于为表单或模型提供其他配置选项。

现在返回模板。您无法从Python代码访问form.field_name,为什么可以在模板中访问?如 django documentation 中所述,当模板系统遇到点时,它会按以下顺序尝试以下查找:

  • 字典查找
  • 属性查找
  • 方法调用
  • 列表索引查找

这意味着模板系统在遇到:{{ form.field_name }}时尝试返回的第一件事是:form['field_name']

关于Django,如何在没有 for 循环的情况下解析单个表单字段(HTML),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5714816/

相关文章:

python - 为 docker-compose 文件设置预 Hook

将webapp部署到树莓派时Python virtualenv?

python - Django:如何将 STATIC_URL 设为空?

javascript - 如何使用javascript验证输入字段仅限制数字并将范围设置为最大值和最小值

使用Forms.ModelMultipleChoiceField的Django模型表单

python - 如何在自定义 Django ModelChoiceField 上获取 help_text

python - Django REST API 'get' 函数

forms - JQuery Ajax 表单附加查询字符串

laravel - 如何将搜索结果更改为友好的 url

python - 在Django2.1中提交后如何获取modelform中的ckeditor字段值?