django - Django Views 存在不允许所有上下文变量出现在模板中的问题
问题描述
我制作了一个滑块模型,其中包含 3 个与其相关的图像和文本以在轮播中滑动
我的问题是我希望这些图像按照模型分配的顺序显示,但只出现一个。
如果我删除{% if sliders %}
{% for slider in sliders %}
最新的图像只出现,因为在视图中它被过滤了 .latest('timestamp')
我也尝试.latest('timestamp')
在视图中替换.all()
它仍然没有用
这是模型:
class Slider(models.Model):
title = models.CharField(max_length=60)
image = models.ImageField(blank=False, upload_to='Marketing')
order = models.IntegerField(default=0)
header_text = models.CharField(max_length=120, null=True, blank=True)
middle_text = models.CharField(max_length=120, null=True, blank=True)
footer_text = models.CharField(max_length=120, null=True, blank=True)
button_text = models.CharField(max_length=120, null=True, blank=True)
active = models.BooleanField(default=False)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
class Meta:
ordering = ['order']
def __str__(self):
return self.title
def get_image_url(self):
return "%s/%s" % (settings.MEDIA_URL, self.image)
这是视图:
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)
try:
context['marketing_message'] = MarketingMessage.objects.filter(
active=True).latest('timestamp')
except MarketingMessage.DoesNotExist:
context['marketing_message'] = None
try:
context['slider'] = Slider.objects.filter(
active=True).latest('timestamp')
except Slider.DoesNotExist:
context['slider'] = None
return context
这是模板:
{% if slider %}
{% for slider in sliders %}
<div class="carousel-item {% if forloop.first %} active {% endif %}">
<div class="view" style="background-image: url('{{ slider.get_image_url }}'); background-repeat: no-repeat; background-size: cover;">
<div class="mask rgba-black-strong d-flex justify-content-center align-items-center">
<div class="text-center white-text mx-5 wow fadeIn">
<h1 class="mb-4">
{% if slider.header_text %}
<strong>{{ slider.header_text }}</strong>
{% endif %}
</h1>
<p>
{% if slider.middle_text %}
<strong>{{ slider.middle_text }}</strong>
{% endif %}
</p>
<p class="mb-4 d-none d-md-block">
{% if slider.footer_text %}
<strong>{{ slider.footer_text }}
</strong>
{% endif %}
</p>
{% if slider.button_text %}
<a target="_blank" href="" class="btn btn-outline-white btn-lg">
{{ slider.button_text }}
<i class="fas fa-graduation-cap ml-2"></i>
</a>
{% endif %}
</div>
</div>
</div>
</div>
{% endfor %}
{% endif %}
解决方案
进行以下更改
视图.py
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)
try:
context['marketing_message'] = MarketingMessage.objects.filter(active=True).latest('timestamp')
except MarketingMessage.DoesNotExist:
context['marketing_message'] = None
try:
context['sliders'] = Slider.objects.filter(active=True).order_by('timestamp')
except Slider.DoesNotExist:
context['sliders'] = None
return context
模板
{% if sliders %}
{% for slider in sliders %}
#Your html code
{% endfor %}
{% endif %}
推荐阅读
- sql - 年份值的轻松减法
- c# - 从openxml c#的docx中的表格单元格获取图像
- math - 用初学者的话来说,NaN(非数字)是什么?
- c# - User.Identity.Name 始终为 null 并且在 PasswordSignInAsync MVC .Net Core 3.0 之后声明计数为 0
- c# - 不能在类之间传递列表中的值
- python-3.x - CondaHTTPError:未找到 dask-core-2.7.0-py_0.tar.bz2 的 HTTP 404
- typescript - combineLatest 在调用 next 后没有被调用
- python - 无法修改功能以坚持一个工作代理
- flutter - Dart:对象与函数什么是最好的实现选择
- c - 如何将命令行参数中给出的整个单词数组直接传递给函数?