【问题标题】:Template not showing context variable模板未显示上下文变量
【发布时间】:2020-05-09 15:28:26
【问题描述】:

我创建了一个名为营销应用程序的应用程序,它可以自定义要在主页顶部写入的消息。我的问题是这些消息在所有配置后都没有显示,我不知道为什么这可能是模板,因为 {{ 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  %}

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

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

    【讨论】:

    • context['marketing_message'] = MarketingMessage.objects.filter(active=True).sortby('-timestamp')?
    • @SwetankPoddar 'QuerySet' 对象没有属性 'sortby'
    • 哦,对不起,我的意思是order_by ... context['marketing_message'] = MarketingMessage.objects.filter(active=True).order_by('-timestamp')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2020-08-21
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多