簡體   English   中英

如果我想在 Django 模板中有條件地使用數據庫數據,我需要做什么?

[英]What do I need to do if I want to use database data conditionally in Django templates?

我正在 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 %}

現在我想要的是,如果index.html中的列表項中單擊的elementtitle"two_piece_suit" ,則將{{ buttoning }}的項顯示為列表,否則通過。

如果我使用一些 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>缺少,並且您的 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 時才會顯示按鈕列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM