python - 将类添加到 Django label_tag() 输出

标签 python django forms newforms

我需要一些方法将类属性添加到 label_tag() 的输出中表单字段的方法。

我看到可以传入 attrs字典,我已经在 shell 中对其进行了测试,我可以执行以下操作:

for field in form:
    print field.label_tag(attrs{'class':'Foo'})

我会看到 class='Foo'在我的输出中,但我看不到添加 attrs 的方法来自模板的参数——事实上,模板是专门针对这个设计的,不是吗?

我的表单定义中有没有办法定义要在标签中显示的类?

在表单中,我可以执行以下操作来给输入一个类

self.fields['some_field'].widget.attrs['class'] = 'Foo'

我只需要让它输出 <label /> 的类也是。

最佳答案

技巧1

我不同意另一个答案的断言,即过滤器会“不那么优雅”。如您所见,它确实非常优雅。

@register.filter(is_safe=True)
def label_with_classes(value, arg):

    return value.label_tag(attrs={'class': arg})

在模板中使用它同样优雅:

{{ form.my_field|label_with_classes:"class1 class2"}}

技巧2

另外,我发现的一种更有趣的技术是:Adding * to required fields .

您为 BoundField.label_tag 创建一个装饰器,该装饰器将在适当设置 attrs 的情况下调用它。然后你猴子修补 BoundField 以便调用 BoundField.label_tag 调用装饰函数。

from django.forms.forms import BoundField

def add_control_label(f):
    def control_label_tag(self, contents=None, attrs=None):
        if attrs is None: attrs = {}
        attrs['class'] = 'control-label'
        return f(self, contents, attrs) 
    return control_label_tag

BoundField.label_tag = add_control_label(BoundField.label_tag)    

关于python - 将类添加到 Django label_tag() 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/414679/

相关文章:

python - 通过某个 "type"(属性)的最新记录提高QuerySet过滤器的效率

python - 在 Django 中聚合 save()s?

python - django 显示来自父表的对象

javascript - 防止页面刷新并提交表单数据

ruby-on-rails - Ruby on Rails 2 表单样式 - 简单问题

打印其源代码的 Python 脚本

python - PyOpenGL glReadPixels 在创建最终指针后导致 ctypes 参数错误

python - 从Python编写没有 Pandas 的 Parquet 文件

javascript - JS - jQuery - 启用禁用带有复选框的表单字段

python flask 如何将动态参数传递给装饰器