这是我第一次使用MEDIA_ROOT / MEDIA_URL,我对配置感到有些困惑。我有一个图像上传表单,保存原始图像加上调整大小的副本。我想将两个图像保存到我的MEDIA文件夹,但将它们分开。目前的结构:
project/
----apps/
--------appOne/
------------static/
------------templates/
------------__init__.py
------------models.py
------------urls.py
------------views.py
--------__init__.py/
----MEDIA/
----project/
--------__init__.py
--------settings.py
--------urls.py
----manage.py
我想将原始上传的图像保存到MEDIA /,并将调整后的图像保存到MEDIA文件夹内的文件夹,如MEDIA / media /。现在,它已经筑巢了3次:
original image goes to ---> MEDIA/media/
resized image goes to ---> MEDIA/media/media
我几乎是肯定的我设置错了,但我已经摆弄了太长时间没有任何工作。似乎每个教程都以不同的方式配置,我只是不确定首选结构是什么,或者为什么我当前的配置不按我期望的方式工作。
这是我的settings.py:
MEDIA_ROOT = os.path.join(BASE_DIR,'MEDIA')
MEDIA_URL = "media/"
models.py:
from django.conf import settings
from smartfields import fields
from smartfields.dependencies import FileDependency
from smartfields.processors import ImageProcessor
class Image(models.Model):
client = models.ForeignKey(Client, null=True, blank=True)
model_pic = fields.ImageField(upload_to=settings.MEDIA_URL, dependencies=[
FileDependency(processor=ImageProcessor(
format='PNG', scale={'max_width': 500, 'max_height': 500}))
])
views.py:
def upload(request):
form = ImageUploadForm(request.POST, request.FILES)
if form.is_valid():
client = Client.objects.get(id=request.session['id'])
image = Image.objects.create(client=client, model_pic=form.cleaned_data['image'])
return redirect(reverse('cphh:gallery'))
def show_images(request):
context = {
'images': Image.objects.all().order_by('-created_at'),
'media_url': settings.MEDIA_URL,
}
return render(request,'cphh/gallery.html', context)
三重嵌套的上传图片可以在我的模板上正确呈现:
{% for image in images %}
<img class="gallery-image" src="{{media_url}}{{ image.model_pic }}"
{% endfor %}
答案 0 :(得分:0)
首先在 settings.py MEDIA_URL 中必须是这样的:
MEDIA_URL = "/media/"
然后删除 MEDIA 文件夹。只有媒体文件夹就足够了。 如果您需要为上传的图片添加缩略图,可以使用django easy_thumbnails 包
答案 1 :(得分:0)
根据文件
MEDIA_ROOT
是保存用户上传文件的目录的绝对文件系统路径。
将上传的图片推送到根目录的代码应该是settings.MEDIA_ROOT/<sub-folder>
而不是settings.MEDIA_URL
MEDIA_URL
是url
占位符,客户应该点击访问您的媒体。当您不想将媒体保留在本地文件系统上,而是放在像amazon s3这样的外部存储上时,这非常有用。
在模板中使用{{MEDIA_URL}}
为您提供了一种不对最终媒体位置进行硬编码的好方法。