使用模板标签时 Django 图像不显示在 Django 中

Django Image not showing up in django when using template tags

当我尝试调用这样的图像时 {{ profile.image.url }} 它在个人资料页面中有效,但在主页中 {{ post.user.profile.image.url }} 没有任何显示,这不是我所期望的。我也试过检查图像 url 是否工作,是的,它正在工作。 注意:它在配置文件页面中按预期工作正常,但在 index.html 中似乎没有显示任何内容。

index.html

{% for post in post_items %}
   <a href="{{post.user.profile.image.url}}" class="post__avatar">
       <img src="{{post.user.profile.image.url}}" alt="User Picture">
   </a>
   <a href=""{{ post.user.username }}</a>

models.py

class Profile(models.Model):
    user = models.ForeignKey(User, related_name='profile', on_delete=models.CASCADE)
    image = models.ImageField(upload_to="profile_pciture", null=True)


    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

    def __str__(self):
        return f'{self.user.username} - Profile'

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

您定义 Profile 模型的方式导致 one-to-many 与 User 的关系,因此向后遵循关系的字段类似于 post.user.profile_set.objects.all().first().image .

既然你想要一个 one-to-one 关系,Profile 模型应该是:

class Profile(models.Model):
    user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
    image = models.ImageField(upload_to="profile_pciture", null=True)

有了这个,您应该能够向后跟踪 post.user.profile.image 的关系。

您可以在此处找到相关的 docs