現在、静的ファイルとメディアファイルの2種類のファイルがあります。静的ファイルには、css、jsおよびその他の静的コンテンツが含まれています。メディアファイルには、ユーザーがアップロードしたものが含まれています。静的フォルダーは、メディアフォルダーのすぐ隣にあります。これで、展開されたマシン上にあります。 DEBUG = False
を設定すると、静的ファイルは問題なく表示されますが、メディアコンテンツは表示されません。 404 not found
エラーが発生します。私の質問は、DEBUG = Falseの場合、本番環境でメディアコンテンツをどのように表示するかです。 DEBUG = Trueの場合、すべてが正常に機能しているように見えますか?私は次のことを読みました ページ そしてこれらのことを試しました。
1-静的コンテンツと同じように静的メディア用に別のフォルダーを作成しようとしました。現在、静的コンテンツはcollectstatic
コマンドで管理されています。 webfactionでApacheを使用しています。static_content
を実行したときに./manage.py collectstatic
という静的フォルダーがあります。静的フォルダー内のすべてのコンテンツがstatic_content
フォルダーにコピーされました。別の静的フォルダーを作成してみました。 static_media
と呼ばれます。ただし、./manage.py collectstatic
を実行すると、media
フォルダの内容がstatic_content
にコピーされ、本来のようにstatic_media
にコピーされませんでした。 collectstaticコマンドがコンテンツをstatic_media
に貼り付けなかった理由を誰かに教えてもらえますか?
これは私の構成がどのように見えるかです
ALLOWED_HOSTS = [
"*",
'mywebsite.com',
'www.mywebsite.com.com',
]
STATIC_URL = 'http://mywebsite.com.com/static/'
STATIC_ROOT = '/home/admin/webapps/static_content'
STATICFILES_DIRS = (
'/home/admin/webapps/mainfolder/mainapp/static',
'/home/admin/webapps/mainfolder/mainapp/media',
)
PROJECT_PATH = os.path.join(BASE_DIR, 'static')
MEDIA_URL = 'http://mywebsite.com.com/media/'
MEDIA_ROOT = '/home/admin/webapps/static_media'
これは私のurls.pyがどのように見えるかです
admin.autodiscover()
urlpatterns = [
....
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
DEBUG = Falseの場合の静的コンテンツと同じように、メディアコンテンツを管理するための別のフォルダーを作成する正しいアプローチを使用していますか?もしそうなら、なぜcollectstaticコマンドがすべてのメディアコンテンツをstatic_content
フォルダーではなくstatic_media
フォルダーにダンプするのですか?また、ユーザーがデータをアップロードするときにメディアコンテンツを管理するために静的フォルダーを使用すると、データはmedia
またはstatic_media
にアップロードされます。
メディアディレクトリにcollectstatic
を使用しないでください。 _'/home/admin/webapps/mainfolder/mainapp/media'
_から_STATICFILES_DIRS
_を削除してから、
_MEDIA_ROOT = '/home/admin/webapps/mainfolder/mainapp/media'
_
これを実行すると、static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
は_DEBUG = True
_のときにメディアファイルを提供するはずです。
_DEBUG = False
_の場合、メディアファイルを提供するには Apacheを設定 する必要があります。
あなたのurls.py
ファイル:
この行を追加します
from Django.views.static import serve
これらの2つのURLをurlpatternsに追加します。
url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
それは私のために働いた:)
Nginxを使用している場合は、メディアファイルを提供できるようにします
例えば
場所/ media_root / home/myproject dir/myproject; }