我需要一些方法将类属性添加到 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/