首页 > 解决方案 > 为什么 Django 不通过 ListView 将 ImageField 数据传递给模板?

问题描述

这是我的第一个编程项目,也是关于 StackOverflow 的第一个问题——所以请温柔一点!我一直很好,并检查了所有相关的现有问题和答案——如果我错过了,请提前道歉。

我有一个包含图像的模型:

模型.py

class Image(models.Model):
    image = models.ImageField(upload_to='portfolio-images/', blank=False, null=False)
    uploaded_by = get_user_model()
    uploaded = models.DateTimeField(auto_now_add=True, editable=False)
    alt_text = models.CharField(verbose_name='Alternate text', max_length=200, blank=True, null=True)

    def __str__(self):
        return self.alt_text

    def get_absolute_url(self):
        return reverse('image_detail', args=[str(self.alt_text)])

由这些视图处理:

视图.py

class ImageDetailView(DetailView):
    model = Image
    context_object_name = 'image'
    template_name = 'image_detail.html'

class ImageListView(ListView):
    model = Image
    context_object_name = 'images'
    template_name = 'image_list.html'

现在,当这些被传递到它们的相关模板时,DetailView 会正常工作 - 使用此代码将 url 传递给模板,并且图像会在浏览器中呈现。

image_detail.html

... 
<img src="{{ image.image.url }}" alt="{{ image.alt_text }}">
...

但是 ListView 不会将 url 或 alt-text 传递到模板中。这是我用来在模板中调用它的代码:

image_list.html

{% for image in images %}
<img src="{{ images.image.url }}" alt="{{ images.alt_text }}">
{% endfor %}

奇怪的是,它正在从数据库中获得响应,因为循环在呈现页面时会创建 5 个标签 - 并且表中有 5 个图像。但它不会添加图像 url 或替代文本:

127.0.0.1:8000/图像/

<div class="container">
  <img src="" alt="">
  <img src="" alt="">
  <img src="" alt="">
  <img src="" alt="">
  <img src="" alt="">
</div> 

非常感谢任何建议 - 非常感谢。

标签: djangodjango-views

解决方案


推荐阅读