2017-04-13 69 views
0

這是我第一次使用MEDIA_ROOT/MEDIA_URL,我對配置有點困惑。我有一個圖像上傳表單,可以保存原始圖像和調整大小的副本。我想將這兩個圖像保存到我的MEDIA文件夾,但將它們分開。目前的結構:Django MEDIA_ROOT,MEDIA_URL等

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 /和調整後的圖像保存到一個文件夾中的媒體文件夾內,如媒體/媒體/。現在,它的嵌套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

首先在settings.pyMEDIA_URL必須是這樣的:

MEDIA_URL = "/media/" 

然後刪除MEDIA文件夾。只有媒體文件夾就夠了。 和如果你需要爲你上傳的圖片的縮略圖,你可以使用Django easy_thumbnails軟件包這一

+0

請閱讀此鏈接: https://docs.djangoproject.com/en/1.10/ref/settings/#media-url https://docs.djangoproject.com/en/1.10/ref/設置/#media-root https://easy-thumbnails.readthedocs.io/en/2.1/ –

0

按照文檔

MEDIA_ROOT是絕對的文件系統路徑將存儲用戶上傳的文件的目錄。

你的代碼,推動上傳的圖片到root應該可以代替settings.MEDIA_ROOT/<sub-folder>settings.MEDIA_URL

MEDIA_URL,另一方面是爲url客戶應該打訪問您的媒體的佔位符。當您不想將媒體保存在本地文件系統中時,這很有用,但對於像amazon s3這樣的外部存儲器來說,這非常有用。

在模板中使用{{MEDIA_URL}}爲您提供了一種不對最終媒體位置進行硬編碼的好方法。