在不使用 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 等服务。
我正在尝试将我构建的 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 等服务。