模板未显示上下文变量

时间:2020-05-09 15:28:26

标签: django django-templates

我创建了一个名为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 :(得分:0)

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()并遍历开始日期和结束日期内的消息。