Django 템플릿의 모듈러스 %


120

django의 모듈러스 연산자와 같은 것을 사용하는 방법을 찾고 있습니다. 내가하려는 것은 루프의 모든 네 번째 요소에 클래스 이름을 추가하는 것입니다.

계수를 사용하면 다음과 같습니다.

{% for p in posts %}
    <div class="post width1 height2 column {% if forloop.counter0 % 4 == 0 %}first{% endif %}}">
        <div class="preview">

        </div>
        <div class="overlay">

        </div>
        <h2>p.title</h2>
    </div>
{% endfor %}

물론 이것은 %가 예약 된 문자이기 때문에 작동하지 않습니다. 이 작업을 수행하는 다른 방법이 있습니까?


해봤 어? 장고가 제공하는 templatetag태그를하지만, 커버 그 {%, %}등 (하지 %).
Platinum Azure

4
예, 시도했지만 다음과 같은 오류가 발생합니다. 나머지를 구문 분석 할 수 없습니다. '%'에서 '%'모듈러를 구문 분석하는 방법을 모르기 때문이라고 생각합니다. 연산자는 문서 docs.djangoproject.com/en/dev/ref/templates/builtins/…
underdoeg

답변:


210

내장 장고 필터 인 divisibleby 가 필요합니다 .

{% for p in posts %}
    <div class="post width1 height2 column {% if forloop.counter0|divisibleby:4 %}first{% endif %}">
        <div class="preview">

        </div>
        <div class="overlay">

        </div>
        <h2>p.title</h2>
    </div>
{% endfor %}

1
아 네, 바로 그 거예요. 지금 사이클을 사용하지만 나중에 참조 할 수 있습니다. 나는 modulor 100 또는 무언가와 함께 cycle을 사용하고 싶지 않습니다. :) 실제로 나는이 대답을 올바른 것으로 표시하고 싶습니다. 그것은 modulor에서가 아니라 해결 방법 초점을 맞추고 있기 때문에 ...
underdoeg

15

Django 템플릿 태그에서 모듈러스 연산자를 사용할 수 없지만 그렇게하는 필터를 작성하는 것은 쉽습니다. 다음과 같이 작동합니다.

@register.filter
def modulo(num, val):
    return num % val

그리고:

{% ifequal forloop.counter0|modulo:4 0 %}

대신 다음과 같이 할 수도 있습니다.

@register.filter
def modulo(num, val):
    return num % val == 0

그리고:

{% if forloop.counter0|modulo:4 %}

또는 cycle태그를 사용할 수 있습니다 .

<div class="post width1 height2 column {% cycle 'first' '' '' '' %}">


12

부트 스트랩 행 및 열 예. 4 개 항목마다 새 행. 항목이 4 개 미만인 경우에도 마지막 행을 닫습니다.

myapp / templatetags / my_tags.py

from django import template

register = template.Library()

@register.filter
def modulo(num, val):
    return num % val

html 템플릿

{% load my_tags %}

{% for item in all_items %} 
    {% if forloop.counter|modulo:4 == 1 %}
        <div class="row">
    {% endif %}

        <div class="col-sm-3">
            {{ item }}
        </div>

    {% if forloop.last or forloop.counter|modulo:4 == 0 %}
        </div>
    {% endif %}

{% endfor %}

2
생성해야 할 디렉토리가 무엇인지 설명하고 템플릿 html에서 사용자 정의 템플릿을로드해야하는 필요성을 설명하므로 더 나은 대답입니다. 감사합니다.
truthadjustr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.