Django“ModelName”对象不是iterab

2024-10-03 17:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想在一个html文件中以循环方式显示图像。你知道吗

这是我的型号.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)

这是我的视图.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

我搜索过谷歌,但找不到任何有用的例子。你知道吗

有人能解释一下我做错了什么吗?你知道吗


Tags: 代码py图像imagemodelsrequesthtmltemplate
2条回答

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

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

您只构建了一个没有保存到数据库的新的TemplateImages对象,当然,单个对象是不可iterable的。如果要执行查询,应该使用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,
        # ...
    })

相关问题 更多 >