我无法理解和使用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路径指定的文件夹中找到该图像。
这样做的正确方法是什么?
答案 0 :(得分:16)
您的图片会上传到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 %}
答案 1 :(得分:9)
static
中的{p> upload_to
没有意义,因为用户上传的图片会进入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')
答案 2 :(得分:1)
您应该使用媒体路径,而不是静态路径。见docs