2016-11-14 2 views
1

У меня есть проблемы с иконками в панели администратора в приложении Django. У меня есть все файлы в моей корневой папке медиа:Правильный media_root, и я получил 404 в приложении django

'/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

Are вы уверены, что jquery должен находиться под MEDIA_ROOT вместо STATIC_ROOT? MEDIA предназначен для ресурсов, загружаемых пользователем (-ами), в то время как STATIC предназначен для ресурсов приложений, таких как JS/CSS и т. Д. – Risadinha

+0

Да, я уверен, потому что папка «adminextra» предназначена для файлов, которые я использую в панели администратора. –

+0

Где находится ' jquery.js' находится на вашем диске? В чем значение 'settings.DEBUG'? – Alasdair

ответ

0

If

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

и URL является

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

затем локальный путь к файлу должен быть:

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

, тогда как вы говорите (в комментарии), что файл находится по адресу:

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

Конечно, он не найден.

Это работает по-разному для STATIC-путей и URL-адресов, потому что между ними есть collectstatic и механизм поиска файлов STATIC. Я рекомендую размещать ресурсы в корнях STATIC, потому что они принадлежат им. MEDIA не предназначена для этого.

Кроме того, наилучшая практика должна избегать жестких кодированных абсолютных путей файлов в ваших настройках. Это не будет работать в общем проекте.

Пример установки в <git_root>/mynewproject/settings/base.py:

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'), 
) 

с веб-ресурсов (JS/CSS/.img), проживающих под <git_root>/mynewproject/static и нижнего приложения каталогов и которые поступают collectstatic в <git_root>/static_collected. На производстве у вас будет NGINX или Apache, доставляющие файлы в этом последнем каталоге.

Поместите файл в:

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

(я беру его, concerthall это приложение с models.py файла.)

В классе администратора, который использует его:

class Media: 
    js = ("a‌​dminextra/js/jquery.js",) 
Смежные вопросы