6

我正在尝试将上传的图像显示到我想象中的蔬菜目录的模板中。

我有一个页面可以添加新蔬菜并上传图片。主模板是蔬菜列表,稍后会有缩略图。

现在,在查看蔬菜的详细信息页面时,我想显示其图像,但模板仅显示字符串“VegetableImage Object”来代替图像,即使使用 img 标签也是如此。

我很困惑,因为模板显然已经找到了图像,但它们只是作为通用字符串显示。

模型.py

class Vegetable(models.Model):
        title = models.CharField(max_length=0)
        category = models.CharField(max_length=50,
                                    choices=CATEGORY_CHOICES)
        thumbnail = models.ImageField(upload_to = 'uploaded_images/')


class VegetableImage(models.Model):
    vegetable = models.ForeignKey(Vegetable, default=None, related_name='images')
    image = models.ImageField(upload_to='images/vegetable',
                             verbose_name='image',)

主模板视图(所有蔬菜的列表)和详细视图

class VegetableView(generic.ListView):
    template_name = 'vegetable/vegetable.html'
    context_object_name = 'vegetable_list'

    def get_queryset(self):
        return Vegetable.objects.all()

class DetailView(generic.DetailView):
    model = Vegetable
    template_name = 'vegetable/detail.html'

显示蔬菜细节的细节模板

{% if view %}
    <h1>Title: {{ vegetable.title }}</h1>
    <h2>Category: {{ vegetable.category }}</h2>
    <p>Thumbnail: {{ vegetable.thumbnail }}</p>
    <p>Images:     
{% for vegetable in vegetable.images.all %}
    {{ vegetable }}
    {% endfor %}
</p>


{% else %}
    <p> no vegetables found - error </p>
{% endif %}
4

2 回答 2

6

尝试在模板中使用以下代码显示图像:

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

这是您从 imagefield 对象访问 url 的方式。

在更多技术细节上,ImageField继承自FileField. 正如文档中所述

当您访问FileField模型时,您将获得一个实例FieldFile作为访问基础文件的代理...

所以:

字段文件.url

一个只读属性,通过调用url()底层存储类的方法来访问文件的相对 URL。

在开发中显示上传的用户文件,您需要更改 url。

于 2015-10-05T11:49:08.330 回答
2

您正在尝试输出模型本身,而不是模型上的图像字段。

您可能想在 for 循环中使用不同的变量名称,否则在尝试找出“蔬菜”所指的内容时可能会感到困惑。

尝试

{% if view %}
    <h1>Title: {{ vegetable.title }}</h1>
    <h2>Category: {{ vegetable.category }}</h2>
    <p>Thumbnail: {{ vegetable.thumbnail }}</p>
    <p>Images:     
{% for vegetable_image in vegetable.images.all %}
    {{ vegetable_image.image.url }}
    {% endfor %}
</p>


{% else %}
    <p> no vegetables found - error </p>
{% endif %}
于 2015-10-05T11:50:03.863 回答