Django中的Bootstrap样式

时间:2015-08-01 18:45:37

标签: python css django twitter-bootstrap

主要是在bootstrap中看到CSS / HTML,我们遇到了以下模板。

    <div class="row">
      <div class="col-sm-6">
        # Add image/ or data you want
      </div>
      <div class="col-sm-6">
        # Add image/ or data you want
      </div>
    </div>

    # Second row

    <div class="row">
      <div class="col-sm-6">
        # Add image/ or data you want
      </div>
      <div class="col-sm-6">
        # Add image/ or data you want
      </div>
    </div>

我们如何在Django模板中实现此行为?我的意思是,当我们迭代一个值列表时,我们如何跟踪,我们需要开始一个新的.row

脏溶液

检查循环迭代计数并执行整数操作以检查是否应该启动新的.row元素。

思考?

2 个答案:

答案 0 :(得分:1)

这有效:

{% for obj in objects %}
{% if not forloop.counter|divisibleby:2 and forloop.last %}
    <div class="row">
        <div class="col-md-6">
            {{ obj }}
        </div>
    </div>
{% elif not forloop.counter|divisibleby:2 %}
    <div class="row">
        <div class="col-md-6">
            {{ obj }}
        </div>
{% elif forloop.counter|divisibleby:2 %}
        <div class="col-md-6">
            {{ obj }}
        </div>
    </div>
{% endif %}
{% endfor %}

此解决方案使用Django内置标记和过滤器。您可以考虑创建自定义标记,但这超出了问题的范围。

Django:For LoopCustom Tags

答案 1 :(得分:1)

创建一个模板过滤器,用于将列表拆分为块:

from django import template

register = template.Library()

@register.filter
def chunks(l, n):
    n = max(1, int(n))
    return (l[i:i+n] for i in xrange(0, len(l), n))

用法:

{% for chunk in images|chunks:2 %}
    <div class="row">
        {% for image in chunk %}
            <div class="col-sm-6">
                # Add image/ or data you want
            </div>
        {% endfor %}
    </div>
{% endfor %}

您还可以在将列表发送到模板之前将其拆分为块。

有关如何将列表拆分为块的更多信息: How do you split a list into evenly sized chunks?

填充列表的自定义过滤器:

@register.filter
def ljust_list(l, n):
    """
    ljust_list([1, 2], 4) -> [1, 2, None, None]
    """
    return l + [None] * (n - len(l))

@register.filter
def rjust_list(l, n):
    """
    rjust_list([1, 2], 4) -> [None, None, 1, 2]
    """
    return [None] * (n - len(l)) + l

用法:

{% for chunk in images|chunks:2 %}
    <div class="row">
        {% for image in chunk|ljust_list:2 %}
            <div class="col-sm-6">
                # Add image/ or data you want
            </div>
        {% endfor %}
    </div>
{% endfor %}