私はDjangoの管理者経由で画像をアップロードしてからフロントエンドのページかURLで画像を表示しようとしています。
これはすべて私のローカルマシン上にあることに注意してください。
私の設定は次のとおりです。
MEDIA_ROOT = '/home/dan/mysite/media/'
MEDIA_URL = '/media/'
Upload_toパラメータを 'images'に設定し、ファイルは正しくディレクトリにアップロードされました。
'/home/dan/mysite/media/images/myimage.png'
しかし、私は次のURLで画像にアクセスしようとすると:
http://127.0.0.1:8000/media/images/myimage.png
404エラーが発生します。
アップロードしたメディア用に特定のURLconfパターンを設定する必要がありますか?
何かアドバイスは大歓迎です。
ありがとう。
Djangoのアップデート> = 1.7
Django 2.1のドキュメントによると 開発中にユーザがアップロードしたファイルの配信
from Django.conf import settings
from Django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Djangoはこれがデバッグモードでのみ使用されることを保証して処理するのでif settings.DEBUG
はもう必要ありません。
Djangoに対するオリジナルの答え<= 1.6
これをあなたのurls.pyに入れてみてください。
from Django.conf import settings
# ... your normal urlpatterns here
if settings.DEBUG:
# static files (images, css, javascript, etc.)
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'Django.views.static.serve', {
'document_root': settings.MEDIA_ROOT}))
DEBUG = True
(ローカルコンピュータで実行しているとき)の場合はDjangoから静的メディアを提供できますが、productionとDEBUG = False
の場合はWebサーバー設定に静的メディアを提供させることができます。
公式のDjango DOCを注意深く読んでください。そうすれば、最も適切な答えが見つかります。
これを解決するための最善かつ最も簡単な方法は以下のとおりです。
from Django.conf import settings
from Django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Django 1.9では、ドキュメントに従って以下のコードを追加する必要があります。
from Django.conf import settings
from Django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
詳細については、こちらを参照してください。 https://docs.djangoproject.com/en/1.9/howto/static-files/#serving-files-uploaded-by-a-user-during -開発
アップロードしたメディア用に特定のURLconfパターンを設定する必要がありますか?
はい。開発のためには、これをURLconfに追加するのと同じくらい簡単です。
if settings.DEBUG:
urlpatterns += patterns('Django.views.static',
(r'media/(?P<path>.*)', 'serve', {'document_root': settings.MEDIA_ROOT}),
)
ただし、制作には、Apache、lighttpd、nginx、またはご希望のWebサーバーを使用してメディアを配信します。
Django 2.0でやったことsetting.py
でFirst MEDIA_ROOTをMEDIA_URLに設定
MEDIA_ROOT = os.path.join(BASE_DIR, 'data/') # 'data' is my media folder
MEDIA_URL = '/media/'
次に、次のように追加してcontext_processors
のmedia
TEMPLATE_CONTEXT_PROCESSORS
を有効にします。
TEMPLATES = [
{
'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
#here add your context Processors
'Django.template.context_processors.media',
],
},
},
]
media context processor
が有効になりました。これですべてのRequestContext
に変数MEDIA_URL
が入ります。
これでtemplate_name.html
でこれにアクセスできます
<p><img src="{{ MEDIA_URL }}/image_001.jpeg"/></p>
(少なくとも)Django 1.8の場合:
使うなら
if settings.DEBUG:
urlpatterns.append(url(r'^media/(?P<path>.*)$', 'Django.views.static.serve', {'document_root': settings.MEDIA_ROOT}))
上で説明したように、デフォルトビューを対象とする "catch all" URLパターンがurlpatterns = []の前に来ないようにしてください。 .appendは追加されたスキームをリストの最後に追加するので、もちろん以前のURLパターンがマッチしない場合にのみテストされます。これを避けるには、ifステートメントとは別に、 "catch all"というURLパターンを最後に追加します。
if settings.DEBUG:
urlpatterns.append(url(r'^media/(?P<path>.*)$', 'Django.views.static.serve', {'document_root': settings.MEDIA_ROOT}))
urlpatterns.append(url(r'$', 'views.home', name='home')),
URLconfパターンをすべて設定した後に直面する可能性があるもう1つの問題は、変数{{ MEDIA_URL }}
がテンプレートで機能しないことです。これを修正するには、settings.pyに必ず追加してください。
Django.core.context_processors.media
あなたのTEMPLATE_CONTEXT_PROCESSORS
に。
Django 1.10.6を使用して Django-publications アプリ用にPDFを配信するために必要な変更は次のとおりです。
settings.py
で、あなたと同じメディアディレクトリの定義を使用しました:
MEDIA_ROOT = '/home/user/mysite/media/'
MEDIA_URL = '/media/'
プロジェクトのメインurls.py
内の@thisisashwanipandeyによって提供されているとおり:
from Django.conf import settings
from Django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py
内の@ r-allelaによって提供された回答の修正。
TEMPLATES = [
{
'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# ... the rest of your context_processors goes here ...
'Django.template.context_processors.media',
],
},
},
]
Django 1.8に対するMicah Carrickの回答に追加します。
if settings.DEBUG:
urlpatterns.append(url(r'^media/(?P<path>.*)$', 'Django.views.static.serve', {'document_root': settings.MEDIA_ROOT}))
これがDjango 1.10の場合:
if settings.DEBUG:
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
これは私がDjango 1.11を使ってPython 3.6でDEBUG = Falseモードで画像レンダリングを達成するためにしたことです
from Django.views.static import serve
urlpatterns = [
url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
# other paths
]
あなたの設定は大丈夫です。 Webサーバーによっては、メディアファイルと静的フォルダファイルを具体的に指定する必要があります。たとえばpythonanywhere.comでは、「Web」セクションに移動し、メディアフォルダと静的フォルダのURL odを追加する必要があります。例えば:
URL Directory
/static/ /home/Saidmamad/discoverthepamirs/static
/accounts/static/ /home/Saidmamad/discoverthepamirs/accounts/static
/media/ /home/Saidmamad/discoverthepamirs/discoverthepamirs/media
私はそれが遅れていることを知っています、しかし同じ問題のためにこのリンクを訪れる人々を助けるためだけに;)