Django ImageField上载到路径

hujrc8aj  于 2022-12-20  发布在  Go
关注(0)|答案(3)|浏览(146)

我在理解和使用Django的ImageField时遇到了问题。
我有一个模型:

class BlogContent(models.Model):
    title = models.CharField(max_length=300)
    image = models.ImageField(upload_to='static/static_dirs/images/')
    description = models.TextField()

我的文件系统当前为:

src
 |---main_project
 |---app_that_contains_blog_content_model
 |---static
       |---static_dirs
                |---images

当我运行服务器并转到管理页面时,我可以添加BlogContent对象。在为图像字段选择图像后,该图像有一个临时名称。但是,在我保存此对象后,我在upload_to路径指定的文件夹中找不到该图像。
正确的做法是什么?

esyap4oy

esyap4oy1#

您的图像将上传到media文件夹,因此最好在images/等模型中更改路径,它们将上传到media/images
settings.py中添加以下内容

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

url.py

from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [....
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

然后,如果您想显示所有这些图像,请在view.py中使用类似的代码
BlogContent.objects.all()
并将其渲染为:

{% for img in your_object %}
    <img src="{{ img.image.url }}" >
{% endfor %}
zz2j4svz

zz2j4svz2#

upload_to中的static没有意义,因为用户上传的图像进入media/文件夹。.你需要这些:

image = models.ImageField(upload_to='blog/%Y/%m/%d')

所有图像都落在:

media/blog/2016/01/02/img_name.jpg

您可以在如下模板中访问它:

<img src="{{ blog.image.url }}">

在设置中:

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
g2ieeal7

g2ieeal73#

你应该使用媒体路径,而不是静态的。

相关问题