Что мне нужно сделать, если я хочу условно использовать данные базы данных в шаблонах Django?

Я работаю над магазином электронной коммерции на Django. Я хочу знать, как я могу использовать данные базы данных, переданные в шаблоны с помощью метода render(), условно через JavaScript или AJAX или JSON?

Например, допустим, у меня есть следующее models.py:

from django.db import models

class Suit(models.Model):
    title = models.CharField(max_length = 100, verbose_name = "Title")
    img = models.FileField(upload_to = 'suit-products/', null = True, verbose_name = "Picture")

    def __str__(self):
        return f"{self.title}"

class Buttoning(models.Model):
    title = models.CharField(max_length = 100, verbose_name = "Title")
    img = models.FileField(upload_to = 'buttonings/', null = True, verbose_name = "Picture")

    def __str__(self):
        return f"{self.title}"

и следующие views.py

from django.shortcuts import render

def index(request):
    suit_prods             = Suit.objects.all()
    buttoning = Buttoning.objects.all()

    context {
        "suit_prods": suit_prods,
        "buttoning": buttoning
    }

    return render(request, "index/index.html", context)

и следующие index.html (шаблон):

    {% for element in suit_prods %}
        <li>
            <a href="#">
                <div id="menu">
                    <img src="{{ element.img.url }}" />
                    <span>{{ element.title }}</span>
                    <span></span>
                </div>
            </a>
        </li>
    {% endfor %}

Теперь, что я хочу, если щелкнутый element в списке элементов в index.html имеет title как "two_piece_suit", то показать элементы {{ buttoning }} как список, иначе pass.

Если я объясню это подробнее, используя некоторый синтаксис JS, то я хочу получить следующее поведение:

<scrip>
    var suit_menu = document.getElementsByClassName("menu");
    for(var i = 0; i < suit_menu.length; i++) {
        if(suit_menu.text == "two_piece_suit") {
            {% for element in buttoning %}
                <li>
                    <a href="#">
                        <div id="buttoning">
                            <img src="{{ element.img.url }}" />
                            <span>{{ element.title }}</span>
                            <span></span>
                        </div>
                    </a>
                </li>
            {% endfor %}
        }
    }
</script>

Если я правильно понимаю, для этого не обязательно нужен JavaScript. Кроме того, в <script> не хватает буквы t, а ваш цикл for, похоже, вообще не добавляет HTML в документ.

Вы можете достичь этого чисто с помощью языка шаблонов Django, интегрировав цикл for кнопок с условием if следующим образом:

{% if element.title == 'two_piece_suit' %}
    {% for button in buttoning %}
        <Some HTML>{{ button.title }}</Some HTML>
    {% endfor %}
{% endif %}

Таким образом, список кнопок будет отображаться только в том случае, если заголовок будет two_piece_suit.

Вернуться на верх