我创建了一个名为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 %}
答案 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()
并遍历开始日期和结束日期内的消息。