В шаблоне не отображается переменная контекста - PullRequest
1 голос
/ 09 мая 2020

Я создал приложение под названием Marketing app, которое настраивает сообщения, которые будут написаны поверх домашней страницы. Моя проблема в том, что эти сообщения не отображаются, когда все настроено, и я не знаю, почему это может быть шаблон, потому что {{ marketing_message.message }} не отображается только

Это модель:

class MarketingMessage(models.Model):
    message = models.CharField(max_length=120)
    active = models.BooleanField(default=False)
    featured = models.BooleanField(default=False)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    start_date = models.DateTimeField(
        auto_now_add=False, auto_now=False, null=True, blank=True)
    end = models.DateTimeField(
        auto_now_add=False, auto_now=False, null=True, blank=True)

    def __str__(self):
        return str(self.message[:12])

Это вид:

from marketing.models import MarketingMessage

class HomeView(ListView):
    model = Item
    paginate_by = 10
    template_name = "home.html"

    def get_context_data(self, **kwargs):
        context = super(HomeView, self).get_context_data(**kwargs)
        context['marketing_message'] = MarketingMessage.objects.all()
        return context

Это шаблон:

{% if marketing_message %}
    <div id="top-alert"class="alert alert-light" style="padding-top:85px; margin-bottom:-24px;">
        <a href="#" class="close" data-dismiss="alert">×</a>
        <div class="container" style="text-align:center">
        <strong> Marketing Message ! : </strong> {{ marketing_message.message}}
        </div>   
    </div>
{% endif  %}

1 Ответ

0 голосов
/ 09 мая 2020

marketing_message - это QuerySet, а не экземпляр модели.

Возможно, вам нужно только последнее «активное» сообщение.

context['marketing_message'] = MarketingMessage.objects.filter(active=True).latest('timestamp')

Или последнее обновленное:

context['marketing_message'] = MarketingMessage.objects.filter(active=True).latest('updated')

Однако latest() завершится ошибкой, если нет объекта, что, вероятно, не то, что вы хотите, но вы можете сделать это:

try:
    context['marketing_message'] = MarketingMessage.objects.filter(active=True).latest('updated')
except MarketingMessage.DoesNotExist:
    context['marketing_message'] = None

Однако, глядя на ваши данные, кажется неверным. У вас есть даты начала и окончания, но также активные. Вы можете подразумевать, что что-то активно, если оно попадает в даты начала и окончания.

Кроме того, поскольку у вас есть это, похоже, что у вас может быть несколько сообщений одновременно, и в этом случае вам следует отбросить .latest() и перебрать те, которые находятся в пределах начальной и конечной дат.

...