Оператор If в шаблоне Django всегда выполняет код независимо от того, является ли условие истинным или ложным
Я использую модель Key-Value, чтобы сделать статические данные шаблона динамическими. Вот код моей модели:
class SiteDataKeyValue(models.Model):
key = models.CharField(max_length=200, verbose_name="Text title")
value = models.TextField(verbose_name="Text")
def __str__(self):
return self.key
Для каждой статической страницы, например, О нас или Контакты, сначала я создал тексты в панели администратора. Затем я написал следующие представления:
class ContactUsPageView(ListView):
"""In this view we are fetching site data from database, in a function named get_context_data.
In this function, we filter the model for objects that contains the word 'contact', therefore
fetching data referring to the about page only. After that the context list is sent to the
template, and there with a for loop and an if statement, each key, value set is chosen for the proper place.
"""
model = SiteDataKeyValue
template_name: str = "core/contact-us.html"
def get_context_data(self, **kwargs):
context = super(ContactUsPageView, self).get_context_data(**kwargs)
context["contact_page_data"] = self.model.objects.filter(key__contains="contact")
return context
Наконец, в шаблоне я пытаюсь использовать эти данные с помощью for loop
и if statement
, как показано ниже:
{% for text in contact_page_data %}
{% if text.key == "contact us factory address" %}
<p class="card-text"><i class="bi bi-geo-alt me-2">
{{ text.value }}
</p>
{% endif %}
{% endfor %}
В моей базе данных есть только один объект с таким ключом "contact us factory address". Но когда шаблон отображается, значок <i class="bi bi-geo-alt me-2">
, который находится ВНУТРИ if statement
, печатается 11 раз (ПРИМЕЧАНИЕ: Только значок печатается 11 раз, а значение на самом деле печатается только один раз)! (11 - это общее количество объектов, которые вид ContactUsPageView
отправил в этот шаблон, содержащий слово "contact"). Почему это происходит? Почему моя иконка, которая находится ВНУТРИ if statemnet, отображается 11 раз, а не один раз?