社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

遍历字段时访问django表单的初始值

Chad • 6 年前 • 1855 次点击  

我正在尝试做一些非常简单的事情;当我传递了这样的初始值时,我想对django模板内的表单字段应用“隐藏”样式:

form = form_class(initial={'field':data})

通常情况下如下:

<li class="{{form.somefield.name}} {% if form.somefield.initial %} hidden{% endif %}>
    ...
</li>

但是我正在迭代表单,所以我想做的是如下所示:

{% for field in form %}
    <li class="{{field.name}} {% if field.initial %} hidden{% endif %}">
    ...
    </li>
{% endfor %}

但这不起作用,因为field.initial只有表单中字段的初始值,而不是表单创建时传入的数据。除了将迭代分解为单独的表单之外,还有一个很好的解决方案吗?

我想到的一些(坏的)解决方案:

  • 压倒一切 初始化 将值从self.initial填充为self.fields;
  • 编写名为%hideifhasInitial%的模板标记
  • 向表单中添加一个使用zip on self和self.initial的方法(不起作用,因为self.initial只有一个元素,self只有4个元素,它只迭代了1个元素,键(字段名)不匹配)。
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31142
 
1855 次点击  
文章 [ 4 ]  |  最新文章 6 年前
dqd
Reply   •   1 楼
dqd    14 年前

具有初始键的解决方案对我不起作用,因为该字段作为值包含空字符串。我必须写自己的自定义标签:

from django import template
register = template.Library()

@register.simple_tag
def field_empty(field):
    if not field.form.initial.get(field.name):
        return ' hidden'

    return ''

在您的示例中,我将按如下方式使用标记:

<li class="{{ field.name }} {% field_empty field %}">
Chad
Reply   •   2 楼
Chad    14 年前

结果发现有一种方法更容易做到这一点。

{% if field.name in form.initial.keys %}
sergiuz
Reply   •   3 楼
sergiuz    8 年前

可以在上访问初始数据 value 属性,初始数据表示 价值 领域:

{{field.value}}

Derek
Reply   •   4 楼
Derek    14 年前

这个怎么样?

{% for field in form %}
    {% if field.name in field.form.initial.keys %}
        ...
    {% endif %}
{% endfor %}