【问题标题】:How to customize django form label如何自定义 django 表单标签
【发布时间】:2012-05-07 03:40:19
【问题描述】:
class permForm(forms.Form):
    def __init__(self, data=None, **kwargs):
        super(permForm, self).__init__(data, **kwargs)

        for item in list(AdminMenu.objects.filter(parent_id=0)):
            self.fields['menu_%d' % item.id] = forms.BooleanField(label=item.title)
            for childitem in list(AdminMenu.objects.filter(parent_id=item.id)):
                arr=[]
                arr.append(str(item.id))
                arr.append(str(childitem.id))
                self.fields['menu_%s' % '_'.join(arr)] = forms.BooleanField(label=childitem.title)

这将返回

类别:复选框

添加类别:复选框

列表类别:复选框

食物:复选框

添加食品:复选框

列出食品:复选框

表格:复选框

添加表格:复选框

列出表格:复选框

用户:复选框

查看用户:复选框
我怎样才能显示如下

类别:复选框

添加类别:复选框

列表类别:复选框

食物:复选框

添加食品:复选框

列出食品:复选框

表格:复选框

添加表格:复选框

列出表格:复选框

用户:复选框

查看用户:复选框

我想让父母类别标签加粗以将其与儿童区分开来。可能的? 我不想使用硬编码格式

【问题讨论】:

  • 使用CSS,更简单,更容易改变。如果您不更改 django 表单模型,您的表单标签将永远不会改变。
  • 不用大喊大叫。正如@platinummonkey 建议的那样,您始终可以使用 CSS,除此之外,您唯一的选择是在表单中单独呈现每个字段,并以这种方式添加任何额外的标签。您不能在 Django 的标签中包含 HTML。
  • 其实可以的。有关示例代码,请参阅我的答案。

标签: django forms label customization


【解决方案1】:

这是一个如何在表单标签中添加一些 HTML 的示例:

from django.template.defaultfilters import mark_safe


class MyForm(forms.Form):
    my_field = forms.CharField(
        max_length=100,
        label = mark_safe('<strong>My Bold Field Label</strong>')
    )

【讨论】:

  • 非常好,但有点脏。
  • 一种更简洁的方法可能是将标签文本放入模板并使用render_to_string,从而不会用HTML污染Python代码。
  • 也许解决方案是使用 floppyforms 来扩展该字段的标签表单呈现。
  • 如果你需要用大炮打苍蝇,那么可以:)
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 2016-09-20
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 2010-10-10
相关资源
最近更新 更多