Что мне нужно сделать, если я хочу условно использовать данные базы данных в шаблонах 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.