在我解释之前,我有一个问题。我正在制作博客,帖子有标题图片。当我为我的博客创建帖子时,我使用管理员上传此图片。此图片是“静态”还是“媒体”?
无论如何,我的项目设置如下: mysite是我的项目,博客是我的应用程序。我在博客中有一个名为static的文件夹。在这个静态文件夹中还有四个文件夹 - css,图像,字体,js。
在settings.py中,我设置了这个:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
我的models.py看起来像这样:
class Post(models.Model):
...
header_image = models.ImageField('article_header_image', upload_to = 'blog/static/images/articleimages')
现在,当我尝试在模板中加载此图片时,它不会显示。
我这样做的方式如下:
{% for post in posts %}
<img src="{{post.header_image.url}}">
{% endfor %}
另一件事,我如何使用upload_to参数将图像上传到应用程序的静态文件夹而不明确说明它?我认为这就是问题所在。如果我使用upload_to ='static / images / articleimages',则会在包含manage.py的mysite文件夹中创建一个新的静态文件夹。
非常感谢任何帮助!
答案 0 :(得分:0)
您可以从设置文件中导入STATIC_ROOT
,然后使用它来生成路径。除此之外,您可以使用可调用的,并在那里构建路径:
import os.path
from django.conf import settings
def generate_upload_path(instance, filename):
return os.path.join(settings.STATIC_ROOT, 'images/articleimages/')
class Post(models.Model):
...
header_image = models.ImageField('article_header_image', upload_to = generate_upload_path)
好的,如果您要将图片上传到应用的static
目录,可以使用应用的__path__
属性:
import blog
def generate_upload_path(instance, filename):
return os.path.join(blog.__path__, 'static/images/articleimages/')