Python 如何显示多对一关系中的内容

Python 如何显示多对一关系中的内容,python,django,django-views,django-templates,many-to-one,Python,Django,Django Views,Django Templates,Many To One,所以我要发疯了,想弄明白这似乎是一个非常简单的任务 我正在制作一个投资组合网站。它有两个模型,项目和图像。Project包含每个项目的大部分数据,而Image是多对一关系,为每个项目提供可变数量的映像 在主页上,我想展示每个项目在自己的部分,以及每个项目在各自部分的图像。目前,我已经显示了项目,并且我能够在每个部分下显示数据库中的所有图像: {% for image in images.all %} <img src="{{ image.image

所以我要发疯了,想弄明白这似乎是一个非常简单的任务

我正在制作一个投资组合网站。它有两个模型,项目和图像。Project包含每个项目的大部分数据,而Image是多对一关系,为每个项目提供可变数量的映像

在主页上,我想展示每个项目在自己的部分,以及每个项目在各自部分的图像。目前,我已经显示了项目,并且我能够在每个部分下显示数据库中的所有图像:

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

def index(request):
home = Home.objects
projects = Project.objects
images = Image.objects

return render(request, 'portfolio/home.html', {'home': home,
                'projects': projects, 'images': images})
模板

{% for project in projects.all %}
<h2>{{ project.title }}</h2>
{{ project.tech|linebreaks }}

     {% for image in project.image_set.all %}
              <img src="{{ image.project_image.url }}" alt="">
     {% endfor %}

{% endfor %}

{% for image in  project.get_images %}
   #DO Something for each image
{% endfor %}
{%for projects.all%}
{{project.title}
{{project.tech | linebreaks}}
{project.image\u set.all%中的图像的百分比}
{%endfor%}
{%endfor%}

您可以向项目模型添加属性,并向项目ForeignKey添加“相关名称”

models.py

class Project(models.Model):
title = models.TextField()
year = models.CharField(max_length=20)
tech = models.TextField()
role = models.TextField()
description = models.TextField()

def __str__(self):
    return self.title

class Image(models.Model):
name = models.TextField()
image = models.ImageField(upload_to='images/project_images/')
project = models.ForeignKey(to=Project, on_delete=models.CASCADE)

def __str__(self):
    return self.name
class Project(models.Model):
   title = models.TextField()
   year = models.CharField(max_length=20)
   tech = models.TextField()
   role = models.TextField()
   description = models.TextField()

   @property
   def get_images(self):
        return self.images.all()



class Image(models.Model):
   name = models.TextField()
   image = models.ImageField(upload_to='images/project_images/')
   project = models.ForeignKey(to=Project, related_name='images', on_delete=models.CASCADE)
然后在模板中,您可以调用项目对象,使用我们定义的属性获取该项目对象的所有图像

模板

{% for project in projects.all %}
<h2>{{ project.title }}</h2>
{{ project.tech|linebreaks }}

     {% for image in project.image_set.all %}
              <img src="{{ image.project_image.url }}" alt="">
     {% endfor %}

{% endfor %}

{% for image in  project.get_images %}
   #DO Something for each image
{% endfor %}

代码中的方法是正确的。只需将
{{image.project_image.url}}
更改为
{{image.image.url}

如果模板变量不存在,但它不存在,您可能会期望模板引擎抛出某种错误

根据所描述的行为:

如果配置参数无效,您可以使用
string\u来显示这些实例(默认情况下,它使用空字符串):

]

上面设置的无效字符串仅在调试模式下运行时指示无效变量的名称。这将导致呈现的html中出现以下内容:


您好,我建议您以另一种方式更改关系,我的意思是,在项目模型中,您必须具有图像的外键,然后您可以使用ListView显示项目,使用DetailView查看项目内的图像