在不使用 url 方法的情况下,在迭代期间显示图像 urls

Displaying image urls during iteration without using the url method

我正在尝试将我构建的 Django 博客部署到 Heroku,但在呈现我的模板时,我在显示博客 post 的缩略图时遇到了一些问题。当我第一次开发应用程序时,我使用 {{ post.thumbnail.url }} 来渲染图像,一切正常。现在我已经部署到 Heroku,我正在破烂的 links 中游泳。

从 [this post][1] 我了解到 html 中的“image.url”格式不适用于 staticfiles/Heroku。这意味着我需要使用 {% static "image url" %} 来显示图像。

问题是:我通过遍历传递给模板的 post 的查询集来渲染这些 post 及其图像。例如:

{% for post in most_recent %}
<a href="{{ post.get_absolute_url }}">
  <div class="item d-flex align-items-center">
    <div class="image"><img src="{{ post.thumbnail.url }}" alt="..." class="img-fluid"></div>
    <div class="title"><strong>{{ post.title }}</strong>
      <div class="d-flex align-items-center">
        <div class="views"><i class="icon-eye"></i>{{ post.view_count }} </div>
        <div class="comments"><i class="icon-comment"></i>{{ post.comment_count }}</div>
      </div>
    </div>
  </div></a>
{% endfor %}

如何在不使用 url 方法的情况下获取 post 缩略图的 url?

这是模型的样子:

class Post(models.Model):
    title = models.CharField(max_length=100)
    overview = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)
    #comment_count = models.IntegerField(default=0)
    #view_count = models.IntegerField(default=0)
    author = models.ForeignKey(Author,on_delete=models.CASCADE)
    thumbnail = models.ImageField()
    categories = models.ManyToManyField(Category)
    featured = models.BooleanField()
    content = HTMLField()
    previous_post = models.ForeignKey('self', related_name='previous', on_delete=models.SET_NULL, blank=True, null=True)
    next_post = models.ForeignKey('self', related_name='next', on_delete=models.SET_NULL, blank=True, null=True)


    def __str__(self):
        return self.title
    
    def get_absolute_url(self):
        return reverse('post-detail', kwargs={
            'id': self.id
        })
    
    def get_update_url(self):
        return reverse('post-update', kwargs={
            'id': self.id
        })

    def get_delete_url(self):
        return reverse('post-delete', kwargs={
            'id': self.id
        })
        
    @property
    def get_comments(self):
        return self.comments.all().order_by('-timestamp')

    @property
    def view_count(self):
        return PostView.objects.filter(post=self).count()

    @property
    def comment_count(self):
        return Comment.objects.filter(post=self).count()

设置设置:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static_in_env')
]
VENV_PATH = os.path.dirname(BASE_DIR)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root')
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

这是完整项目的 link:https://github.com/Kaizen91/ProgramaticLearning 如果您想进行实验。 [1]:

深入研究 Whitenoise 文档后。 http://whitenoise.evans.io/en/stable/django.html 我发现您不能使用 whitenoise 来托管用户上传的文件/媒体文件。为了在生产环境中访问这些文件,您需要使用 Amazon S3、Azure Storage 和 Rackspace CloudFiles 等服务。