gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:54:56 25 4
gpt4 key购买 nike

我想单独解析模型表单的字段,而不是在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com