2017-04-13 9 views
0

これは私のMEDIA_ROOT/MEDIA_URLを初めて使用したものですが、私は構成によって少し混乱しています。私は元の画像とサイズ変更されたコピーを保存する画像アップロードフォームを持っています。私は両方の画像を自分のMEDIAフォルダに保存したいが、それを分けたい。現在の構造:Django MEDIA_ROOT、MEDIA_URL etc

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 /メディアフォルダ内のフォルダにリサイズした画像を、元のアップロードされた画像を保存したいと思います。今、それを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フォルダを削除。 メディアフォルダのみで十分です。 ともあなたはアップロードされた画像のサムネイルが必要な場合は、ドキュメント

MEDIA_ROOTあたりのように、この

+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/ja/2.1/ –

0

ためジャンゴeasy_thumbnailsパッケージを使用することができますが、ユーザーがアップロードしたファイルを保持するディレクトリへの絶対パスです。ルートにアップロードする画像をプッシュ

あなたのコードは、他の一方でsettings.MEDIA_ROOT/<sub-folder>代わりのsettings.MEDIA_URL

MEDIA_URLを持っている必要があり、クライアントが自分のメディアにアクセスするために打つべきでurlのプレースホルダです。これはメディアをローカルファイルシステムに保存したくない場合に便利ですが、amazon s3のような外部ストレージに保存することができます。

テンプレートに{{MEDIA_URL}}を使用すると、最終的なメディアの場所をハードコードしないようにすることができます。

関連する問題