【问题标题】:How to display BooleanField name in template?如何在模板中显示 BooleanField 名称?
【发布时间】:2012-09-02 22:42:34
【问题描述】:

型号:

completed = models.BooleanField(_('Completed'))

模板:

{% if object.completed %}
    <strong>{{ object.completed }}</strong>
{% endif %}

输出:

<strong>True</strong>

我需要什么:

<strong>Completed</strong>

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:
    {% if object.completed %}<strong>Completed</strong>{% endif %}
    

    【讨论】:

    • 这是我目前拥有的。我刚刚翻译了模板 _('Completed') 中的字符串。但是,这不是 DRY,因为 BooleanField 在字段定义中具有名称。
    【解决方案2】:

    我认为你不能使用对象实例来获得它。如果模板中有该模型的modelForm,则可以使用{{form.completed.label}}

    【讨论】:

      【解决方案3】:

      您可以尝试在表单字段中添加标签属性:

      completed = forms.BooleanField(label=mark_safe('<strong>Completed</strong>'))
      

      当您使用{{ form.completed.label }} 时,您将拥有&lt;label&gt;&lt;strong&gt;Completed&lt;/strong&gt;&lt;/label&gt;

      【讨论】:

        【解决方案4】:

        另外,请查看yesno 模板过滤器。用法:

        <strong>{{ object.completed|yesno:"Completed,Uncomplited" }}</strong>
        

        或:

        <strong>{{ object.completed|yesno:"Completed," }}</strong>
        

        更新:

        另一方面,您始终可以制作自己的模板过滤器。例如下一个返回指定字段的verbose_name

        foo_tags.py:

        @register.filter()
        def get_field_name(object, field):
            verbose_name = object._meta.get_field(field).verbose_name
            return verbose_name
        

        template.html:

        {% if object.completed %}
            <strong>{{ object|get_field_name:'completed' }}</strong>
        {% endif %}
        

        【讨论】:

        • 当值为False 时,这会显示额外的&lt;strong&gt;。如果你不想用更清晰的{% if %}...{% endif %},你可以试试{{ object.completed|yesno:"&lt;strong&gt;Completed&lt;/strong&gt;,"|safe }}(嗯,yesno不太适合这个用法……)
        • 虽然我喜欢这个过滤器,但它不适用于我的情况。目标是在一个地方(模型)有字符串“完成”并在模板中重新使用它。
        • @Terra 如何编写自己的模板过滤器。查看我的更新答案
        【解决方案5】:

        我会简单地使用:

        {% if object.completed %}
            <p><strong>Completed</stromg></p>
        {% else %}
            <p><strong>Not Completed</strong></p>
        {% endif %}
        

        【讨论】:

          猜你喜欢
          • 2012-04-08
          • 1970-01-01
          • 1970-01-01
          • 2019-06-24
          • 2016-06-07
          • 1970-01-01
          • 2017-08-18
          • 2014-07-22
          • 2016-10-15
          相关资源
          最近更新 更多