Python/Django - 在 for 标记中获取 ManyToManyField 的值

Posted

技术标签:

【中文标题】Python/Django - 在 for 标记中获取 ManyToManyField 的值【英文标题】:Python/Django - Get value of a ManyToManyField in a for tag 【发布时间】:2016-08-03 00:33:58 【问题描述】:

当我将 % for % 与 Article 类一起使用时,我无法获取图像相关值。我尝试使用 select_related,但我不知道如何定义图像以正确显示在我的<img /> 标签的src="" 属性中

有没有一种干净的方法可以让我按照我的意愿出现?

models.py

    class Image(models.Model):
        gallery = models.ManyToManyField(Gallery)
        name = models.CharField(max_length=100)
        image = models.ImageField(upload_to='static/images/gallery')
        def __str__(self):
            return self.name

    class Article(models.Model):
        section = models.ForeignKey(Menu)
        title = models.CharField(max_length=100)
        text = models.TextField()
        type = models.ForeignKey(Type)
        image = models.ManyToManyField(Image)
        def __str__(self):
            return self.title

views.py

def index(request):
    slider = Article.objects.all()
    images = Image.objects.all()
    return render(request, 'cms/index.html', locals())

模板

% for i in slider %
<li>
    <img src="i.image" />
    <h2>i.title</h2>
    <p>i.text, i.image_url</p>
</li>
% endfor %

【问题讨论】:

检查一下,***.com/questions/17846290/django-display-imagefield 感谢您的回答。这不是关于如何显示图像,而是更多关于如何在我的循环中获取另一个类的内容。 请检查答案。 【参考方案1】:

Article.image 是一个多对多字段。您要显示哪个图像?首先?

<img src="i.image.all.0.image.url" />

全部?

% for im in i.image.all %
<img src="im.image.url" />
% endfor %

【讨论】:

我正在尝试显示一些与循环相对应的文章。在这个循环中,我想显示与文章相关的图像。但是图像属于不同的类别。那怎么办? 您不需要其他课程。您需要的一切都在image 字段中。 image 字段是一个 QuerySet,其中包含所有相关图像。【参考方案2】:

您必须使用 2 个 forloop 来在多张表中显示图像。

% for i in slider %
<li>
    % for im in i.image.all %
    <img src="im.image.url" />
    % endfor %
    <h2>i.title</h2>
    <p>i.text, i.image_url</p>
</li>
% endfor %

【讨论】:

谢谢,完美解决!因此,如果我在第二个 forloop 中调用 .all,它将存储循环内的所有字段以调用它们?

以上是关于Python/Django - 在 for 标记中获取 ManyToManyField 的值的主要内容,如果未能解决你的问题,请参考以下文章

Python / Django / Jinja2:如何用另一个变量的值扩展变量名(例如在 for 循环中)?

python3--django for 循环中,获取序号

Python Django - 模型:查询/过滤器中的 for 循环

python测试开发django-189.安装celery==3.1.26.post2版本报错No matching distribution found for anyjson>=0.3.3

在模板中留下 FOR 标记后,简单标记丢失设置的值

如何将变量从 python Django 传递到 HTML 模板