2016-11-14 11 views
1

私のDjangoアプリケーションの管理パネルに問題のあるアイコンがあります。 私は私のルートメディアフォルダ内のすべてのファイルを持っている: 正しいmedia_rootと私はdjangoアプリケーションで404を受け取りました

'/files/dev/projects/mynewproject/media' 

が、コンソールで

私は404エラーを取得します。

私urls.py

urlpatterns = static(settings.STATIC_URL, document_root=settings.STATIC_ROOT 
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + patterns('', 
    # ... 
) 

マイMEDIA_ROOT:ターミナルで

MEDIA_ROOT = '/files/dev/projects/mynewproject/media' 

応答:

/media/adminextra/js/jquery.js HTTP/1.1" 404 1829 
+0

ですjqueryはSTATIC_ROOTではなくMEDIA_ROOTの下に置かれるべきですか? MEDIAはユーザーがアップロードしたリソースを対象としていますが、STATICはJS/CSSなどのアプリケーションリソース用です。 – Risadinha

+0

「adminextra」フォルダは管理パネルで使用するファイルのためのものです –

+0

どこにあるのですか? jquery.js'はあなたのディスクにありますか? 'settings.DEBUG'の値は何ですか? – Alasdair

答えて

0

MEDIA_ROOT = '/files/dev/projects/mynewproject/media' 
の場合0

とURLが

http://localhost:8000/media/adminextra/js/jquery.js 

では、ファイルへのローカルパスでなければなりません:

/files/dev/projects/mynewproject/media/adminextra/js/jquery.js 

あなたが(コメントで)say whereasファイルが配置されていることで:

/files/dev/projects/mynewproject/project/concerthall/media/a‌​dminextra/js 

もちろん、それは見つかりません。

これは、collectstaticとSTATICファイルのファインダの仕組みを間に置いているため、STATICパスとURLの動作が異なります。その場所に属しているため、STATICのルートにリソースを配置することをお勧めします。メディアはこれを意味するものではありません。

また、ベストプラクティスでは、ハードコードされた絶対ファイルパスを使用しないでください。これは共有プロジェクトでは機能しません。 <git_root>/mynewproject/settings/base.py

例のセットアップ:あなたのWebリソース(JS/CSS/IMG)<git_root>/mynewproject/staticと下のアプリディレクトリの下にあると<git_root>/static_collectedcollectstaticによって出力されていると

BASE_APP_DIR = os.path.dirname(os.path.realpath(project_module.__file__)) 
PROJECT_DIR = os.path.dirname(BASE_APP_DIR) 

# Static files (CSS, JavaScript, Images) 

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static_collected') 
MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media') 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    'compressor.finders.CompressorFinder', 
) 
STATICFILES_DIRS = (
    os.path.join(BASE_APP_DIR, 'static'), 
) 

。本番環境では、NGINXまたはApacheがそのディレクトリにファイルを配信します。それを使用するあなたの管理者クラスで

mynewproject/project/concerthall/static/a‌​dminextra/js/jquery.js 

(私はそれを取る、concerthallmodels.pyファイルとアプリです。)

:へ

置き、あなたのファイルを

class Media: 
    js = ("a‌​dminextra/js/jquery.js",)