【问题标题】:What do I need to do if I want to use database data conditionally in Django templates?如果我想在 Django 模板中有条件地使用数据库数据,我需要做什么?
【发布时间】:2021-12-30 19:22:44
【问题描述】:

我正在 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 的列表项中单击的element 具有title 作为"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 django django-models django-templates


    【解决方案1】:

    如果我理解正确,您不一定需要 JavaScript 来实现这一点。此外,&lt;script&gt; 缺少一个 t,并且您的 for 循环似乎根本没有将 HTML 添加到文档中。

    您可以完全使用 Django 模板语言通过将按钮 for 循环与 if 条件集成,如下所示:

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

    这样,按钮列表只有在 title 为 two_piece_suit 时才会显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-13
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      相关资源
      最近更新 更多