【问题标题】:How to assign HTML class in django template depending object's field value如何根据对象的字段值在 django 模板中分配 HTML 类
【发布时间】:2017-07-17 10:22:24
【问题描述】:

models.py:

class MyText(models.Model)
    value = models.TextField()
    appearance = models.Charfield(
        max_length=50, 
        choices=(
            ('bold', 'Bold'),
            ('italic', 'Italic'),
        )
    )

对象:

a_lot_of_text = MyText(value='a lot of text', appearance='bold')

我通过context 中的views.py 将这个对象传递给HTML 模板。我想检查(在 HTML 中)a_lot_of_text 有什么样的外观,并使用 certan class 作为其 <div> 元素。换句话说,我想得到这样的东西:

mytemplate.html(伪代码):

<style>
    bold_class {...}
    italic_class {...}
</style>

{% if object.appearance == 'bold' %}
    {% somehow i will use 'bold_class' %}
{% elif object.appearance == 'italic' %}
    {% somehow i will use 'italic_class' %}
{% endif %}

{% for word in object.value %}
    <div class="{{class_that_i_have_chosen_in_if-block}}">{{word}}</div>
{% endfor %}

因为a_lot_of_text 中有很多word,所以我想在for-block 之前检查我的班级1 次并在那里使用它。我想我可以制作my own assignment Tag - 这是正确的解决方案吗?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    是的,您可以使用自定义分配标签,也可以使用内置标签 with https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#with 做您想做的事情

    # models.py
    
    class MyText(models.Model)
        value = models.TextField()
        appearance = models.Charfield(
            max_length=50, 
            choices=(
                ('bold', 'Bold'),
                ('italic', 'Italic'),
            )
        )
    
        def class_name(self):
            if self.appearance == 'bold':
                ...
                return 'bold-class'
            elif  self.appearance == 'italic':
                ...
                return 'italic-class'
            ...
    
    
    # template.html
    
    {% with block_class=object.class_name %}
        {% for word in object.value %}
            <div class="{{ block_class }}">{{ word }}</div>
        {% endfor %}
    {% endwith %}
    

    但是,如果您正在寻找简单的解决方案 - 根据 appearance 值获取名称或您的 CSS 类。 然后你只需要使用appearance 值并为其添加'-class':

    {% for word in object.value %}
        <div class="{{ object.appearance }}-class">{{ word }}</div>
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 1970-01-01
      • 2021-11-13
      • 2023-03-04
      • 1970-01-01
      • 2011-10-07
      • 2019-03-28
      • 2010-10-20
      • 1970-01-01
      相关资源
      最近更新 更多