首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django MEDIA_ROOT、MEDIA_URL等

Django MEDIA_ROOT、MEDIA_URL等
EN

Stack Overflow用户
提问于 2017-04-13 08:56:42
回答 2查看 7.8K关注 0票数 1

这是我第一次使用MEDIA_ROOT/MEDIA_URL,我对它的配置有点迷惑。我有一个图像上传表,保存原始图像加上一个调整大小的副本。我想要将这两个图像保存到我的媒体文件夹中,但要将它们分开。当前结构:

代码语言:javascript
运行
复制
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 /。现在,它嵌套了3次:

代码语言:javascript
运行
复制
original image goes to ---> MEDIA/media/
resized image goes to ---> MEDIA/media/media

我几乎可以肯定我的设置是错误的,但我已经摆弄它太久了,什么都不起作用。似乎每个教程的配置都不同,我只是不确定首选的结构是什么,也不确定为什么我当前的配置不能按我期望的方式工作。

这是我的settings.py:

代码语言:javascript
运行
复制
MEDIA_ROOT = os.path.join(BASE_DIR,'MEDIA')
MEDIA_URL = "media/"

models.py:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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)

三重嵌套的上传图像确实可以在我的模板上正确呈现:

代码语言:javascript
运行
复制
{% for image in images %}
    <img class="gallery-image" src="{{media_url}}{{ image.model_pic }}"
{% endfor %}
EN

回答 2

Stack Overflow用户

发布于 2017-04-13 15:03:36

根据文档

MEDIA_ROOT是存放用户上载文件的目录的绝对文件系统路径。

将上传的图片推送到根目录的代码应该使用settings.MEDIA_ROOT/<sub-folder>而不是settings.MEDIA_URL

另一方面,MEDIA_URL是客户端访问您的媒体时应点击的url的占位符。当你不想把你的媒体保存在本地文件系统上,而是保存在像亚马逊s3这样的外部存储上时,这是很有用的。

在模板中使用{{MEDIA_URL}}为您提供了一种不对最终媒体位置进行硬编码的好方法。

票数 2
EN

Stack Overflow用户

发布于 2017-04-13 14:42:01

首先,在settings.py MEDIA_URL中必须是这样的:

代码语言:javascript
运行
复制
MEDIA_URL = "/media/"

然后删除介质文件夹。仅介质文件夹就足够了。另外,如果你需要上传图片的缩略图,你可以使用Django easy_thumbnails

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43381889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档