জ্যাঙ্গো টেমপ্লেটে মডুলাস%


120

আমি জাঙ্গোর মধ্যে মডুলাস অপারেটরের মতো কিছু ব্যবহার করার উপায় খুঁজছি। আমি যা করার চেষ্টা করছি তা হল প্রতিটি লুপের প্রতিটি চতুর্থ উপাদানকে একটি ক্লাসের নাম যুক্ত করা।

মডুলাস সহ এটি দেখতে এটির মতো হবে:

{% 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ট্যাগ, কিন্তু যে কভার {%, %}ইত্যাদি (না %)।
প্ল্যাটিনাম আজুর

4
হ্যাঁ, আমি এটি চেষ্টা করেছিলাম, তবে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: বাকী অংশটিকে পার্স করতে পারিনি: '%' থেকে '%' আমি এটি ধরে নিয়েছি কারণ এটি মডিউলটি কীভাবে প্যারেন্ট করতে জানে না। অপারেটরটিও ডক্স ডকসগুলিতে
আন্ডারডেগ

উত্তর:


210

আপনার ডিভিশিবলবি দরকার , একটি অন্তর্নির্মিত জ্যাঙ্গো ফিল্টার।

{% 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
আহ্ হ্যাঁ, ঠিক এটি এখন চক্র ব্যবহার করে, তবে ভবিষ্যতের রেফারেন্সের জন্য ভাল। আমি মডুলার 100 বা অন্য কিছু দিয়ে চক্রটি ব্যবহার করতে চাই না :) আসলে আমি এই উত্তরটিকে সঠিক হিসাবে চিহ্নিত করতে চাই go কারণ এটি মডিউলারের দিকে মনোনিবেশ করে, বরং কোনও কর্মপরিকল্পনা ...
আন্ডারডেগ

15

আপনি জ্যাঙ্গো টেমপ্লেট ট্যাগগুলিতে মডুলাস অপারেটরটি ব্যবহার করতে পারবেন না, তবে এটি করার জন্য কোনও ফিল্টার লেখাই যথেষ্ট সহজ। এর মতো কিছু কাজ করা উচিত:

@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

এইচটিএমএল টেমপ্লেট

{% 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
এটি আরও ভাল উত্তর কারণ এটি কীভাবে ডিরেক্টরি তৈরি করতে হবে তা বর্ণনা করে এবং এটি এইচটিএমএল টেমপ্লেটেও কাস্টম টেম্পলেটটি লোড করার প্রয়োজনীয়তার বর্ণনা দেয়। ধন্যবাদ.
ট্রুথহোল্ডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.