Estoy trabajando en una tienda de comercio electrónico en Django. Quiero saber cómo uso los datos de la base de datos pasados a las plantillas usando el método render() , condicionalmente a través de JavaScript, AJAX o JSON.
Por ejemplo, digamos que tengo los siguientes 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}" y siguientes 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) y siguiente index.html (plantilla):
{% 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 %} Ahora lo que quiero es, si el elemento en el que se hizo clic en los element de la lista en index.html tiene el title como "two_piece_suit" , entonces muestre los elementos de {{ buttoning }} como una lista, de lo contrario pase.
Si lo explico más usando alguna sintaxis JS, entonces quiero el siguiente tipo de comportamiento:
<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>Si entiendo correctamente, no necesariamente necesita JavaScript para lograr esto. Además, falta <script> en, y su ciclo for no parece agregar el HTML al documento en absoluto.
Puede lograrlo únicamente con el lenguaje de plantillas de Django integrando los botones for loop con una condición if como esta:
{% if element.title == 'two_piece_suit' %} {% for button in buttoning %} <Some HTML>{{ button.title }}</Some HTML> {% endfor %} {% endif %}De esa forma, la lista de botones solo se muestra si el título es traje de dos piezas.