-1

Django テンプレートで画像を表示する際に問題があります (管理アプリケーションから画像をアップロードしています)。に関するドキュメントやその他の投稿を読みましたがupload_to、まだ理解できませんでした。<img src="{{ a.image}}"/>テンプレートでこれを試した後、これ<img src="{{MEDIA_URL}}{{ a.image}}"/>と同じ結果が得られました。これが私のsettings.pyコードです:

MEDIA_ROOT = '/home/mohamed/code/eclipse workspace/skempi0/media'
MEDIA_URL = '/media/'

最後に、models.py で次のことを試しましたが、惨めに失敗しました。

image = models.ImageField(upload_to = "ads/")
image = models.ImageField(upload_to = ".")

そして使用するimage = models.ImageField(upload_to = MEDIA_URL)と、次のエラーが発生しました

SuspiciousOperation at /admin/advertisments/banner/add/
Attempted access to '/media/cut.jpg' denied.

編集

生成されるリンクは次のとおりです。

<img src="./DSCN6671.JPG">

再編集

これが私の見解です:

def index(request):
spotlightAlbum =  Album.objects.filter(spotlight = True)
spotlightSong = Song.objects.filter(spotlight = True).order_by('numberOfPlays')
homepage = Song.objects.filter(homepage = True).order_by('numberOfPlays')
ads = Banner.objects.all()
copyright = CopyrightPage.objects.get()


try:
    user = User.objects.get(userSlug = "mohamed-turki")
    playlists = UserPlaylist.objects.filter(owner = user.userFacebookId)
    purchase = Purchase.objects.filter(userName = user.userFacebookId)
    user.loginState = 1

    user.save()
except:
    user = None
    playlists = None


context = {'copyright':copyright,  'ads':ads, 'spotlightSong':spotlightSong,'spotlightAlbum': spotlightAlbum, 'homepage':homepage, 'user':user, 'playlists':playlists, 'purchase':purchase }
return render_to_response('index.html',context,context_instance = RequestContext(request))

誰が私が間違っているのか教えてもらえますか?? PS私はDjango 1.4を使用しています

4

4 に答える 4

1

で指定するパスは、プロジェクトの設定ファイル (通常は ) で設定しupload_toた相対パスになります。MEDIA_ROOTsettings.py

YourMEDIA_ROOTはアップロードされたメディアがディスクに保存される場所であり、MEDIA_URLは Django がそれらを提供する URL です。

したがって、モデルの画像属性が次のMEDIA_ROOT場合:/home/mohamed/code/eclipse workspace/skempi0/media

image = models.ImageField(upload_to = "ads/")

次に、アップロードされた画像のディスク上の最終的なホームは に/home/mohamed/code/eclipse workspace/skempi0/media/ads/whatever-you-named-your-file.extなり、それが提供される URL は/media/ads/whatever-you-named-your-file.ext

アップロード パスを に設定してもsettings.MEDIA_URL機能しません。これは、ディスクに保存できる場所ではなく、メディアが提供される場所だからです。

アップロードした画像をテンプレートにロードする場合は、次のようにします (whateverビューからこのオブジェクトを表すテンプレートに送信される変数の名前に置き換えます)。

<img src="{{ whatever.image.url }}"/>

モデルの画像属性は実際には画像ではなく、画像を表す Python クラスです。そのImageFieldクラスのメソッドの 1 つは、プロジェクトの設定で.url()どのように設定したかを考慮して、画像の URL へのパスを構築するものです。MEDIA_URLしたがって、上記のスニペットは次のような HTML を生成します。

<img src="/media/ads/whatever-you-named-your-file.ext"/>

RequestContext() と settings.TEMPLATE_CONTEXT_PROCESSORS

render_to_response()ビューから戻ってきているので、正しく設定されRequestContext()ていることを確認する必要があります。詳細については、1.4 のドキュメントを参照してください。settings.TEMPLATE_CONTEXT_PROCESSORS

于 2012-05-07T15:28:13.167 に答える
0

upload_toWeb URL ではなく、ディレクトリへの絶対パスである必要があります。だからこれを試してください:

image = models.ImageField(upload_to = settings.MEDIA_ROOT)

テンプレートで、使用するだけです

<img src="{{ a.image.url }}">
于 2012-05-07T03:34:07.170 に答える
0

この質問は古いことは知っていますが、同じ問題があり、私の場合はこれで解決しました:

設定.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
PROJECT_DIR  = os.path.dirname(__file__)

MEDIA_ROOT = os.path.join(PROJECT_DIR, "media")

MEDIA_URL = '/media/'

urls.py

次に、私の urls.py には、 /media/ フォルダーを検出してコンテンツを表示するための次のコード行がありませんでした。

urlpatterns += staticfiles_urlpatterns()

urlpatterns = patterns('',
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}, name="media_url"),
) + urlpatterns

それが誰かを助けることを願っています。

于 2015-01-07T06:31:05.990 に答える
0

まず、MEDIA_ROOT を次のように変更することをお勧めします。

MEDIA_ROOT = os.path.join(PROJECT_ROOT,'media')

このようにして、メディア ディレクトリ パスがプロジェクト ルートのすぐ下にあることを確認します。MEDIA_URL は正しく設定されていますが、ファイルのアップロード時には使用されません。MEDIA_ROOT です。

ファイルのアップロードに関して、モデルでフィールドを次のように設定します

image_field = models.ImageField('Image', upload_to='images/some_sub_folder')

先頭にも末尾にもスラッシュを使用していないことに注意してください。上記はPROJECT_ROOT/media/images/some_sub_folder/、元のファイルのファイル名と拡張子で画像をアップロードします。または、callable --more upload_to=filename_convetioninfo hereを使用してファイル名を変更できます。

テンプレートでは、次を使用して画像にアクセスできます

<img src="/media/{{ your_model.image_field }}" />

これが役立つことを願っています、乾杯。

于 2012-05-07T12:47:35.567 に答える