django-'ModelName'对象不可迭代

时间:2019-02-25 20:28:47

标签: python django

我有一个名为TemplateImages的模型类,它保存对媒体文件夹中图像的引用。

我想在html文件中循环显示图像。

这是我的models.py代码:

class TemplateImages(models.Model):
    image = models.ImageField(upload_to='template_images')  # template_images/en/chronological/en-chronological-resume-1.png.
    type = models.CharField(max_length=40)  # e.g. chronological, functional, combination, coverletter
    language_code = models.CharField(max_length=7, choices=languages.LANGUAGE_CHOICES, default='en')  # en.

    def __str__(self):
        return '{}'.format(self.image)

这是我的views.py代码:

def templates(request):
    ...
    language_pref = request.user.userprofile.language_preference
    chronological_images = core_models.TemplateImages('chronological', 'en')
    ...
    return render(request, 'templates/templates.html', {
        ...
        'chronological_images': chronological_images,
        ...
    })

这是我的数据库的屏幕截图:

enter image description here

在我的html页面上,我放置了以下django for循环以在页面上显示25张图像:

 {% for c_image in chronological_images %}
     {{c_image.image|file_url|safe}}"
 {% endfor %}

我收到以下错误消息:

'TemplateImage' object is not iterable

我已经搜索过google,但是找不到任何有用的示例。

有人可以解释我做错了吗?

2 个答案:

答案 0 :(得分:3)

您只是构造了一个TemplateImages对象,而不是运行查询。试试这个:

chronological_images = TemplateImages.objects.filter(
                           type='chronological',
                           language_code='en',
                       )

答案 1 :(得分:1)

您只构造了一个没有保存到数据库的 new TemplateImages对象,当然,单个对象是 not 不可迭代的。如果要执行查询,则应使用TemplateImages.objects.filter(),例如:

def templates(request):
    # ...
    language_pref = request.user.userprofile.language_preference
    chronological_images = core_models.TemplateImages.objects.filter(
        type='chronological',
        language_code='en'
    )
    # ...
    return render(request, 'templates/templates.html', {
        # ...
        'chronological_images': chronological_images,
        # ...
    })