Python 如何显示多对一关系中的内容
所以我要发疯了,想弄明白这似乎是一个非常简单的任务 我正在制作一个投资组合网站。它有两个模型,项目和图像。Project包含每个项目的大部分数据,而Image是多对一关系,为每个项目提供可变数量的映像 在主页上,我想展示每个项目在自己的部分,以及每个项目在各自部分的图像。目前,我已经显示了项目,并且我能够在每个部分下显示数据库中的所有图像: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
{% 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查看项目内的图像