Django не может найти мои медиа-файлы (на сервере разработки) - PullRequest
6 голосов
/ 07 февраля 2012

Носитель в настоящее время находится на моей локальной машине разработки.

Мои MEDIA_ROOT, MEDIA_URL, ADMIN_MEDIA_PREFIX и указаны ниже:

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), "media")
MEDIA_URL = '/media/'
SITE_URL = 'http://localhost:80'
ADMIN_MEDIA_PREFIX = '/media/admin/'

Папка 'admin' не существует, но это не должно иметь значения, я не думаю. В файле urls.py у меня есть:

(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),

Я в растерянности относительно того, что я должен сделать, чтобы это заработало. [Я пытаюсь выучить django и работаю над существующим проектом, который довольно волосатый]

Ответы [ 4 ]

7 голосов
/ 07 февраля 2012

Вы смешиваете и сопоставляете статическую обработку файлов до и после Django 1.3. Первоначально все статические файлы обслуживались с MEDIA_URL, но Django 1.3 представил пакет contrib статических файлов и соответствующие настройки STATIC_ROOT и STATIC_URL. django.views.static.serve использует новое приложение staticfiles, которое вы не настроили.

Предполагая, что вы используете Django 1.3, сначала вам нужно добавить «staticfiles» в INSTALLED_APPS. Затем вам нужно определить STATIC_ROOT и STATIC_URL. Стандартное расположение - это каталог уровня проекта с именем «static».

Вам также необходимо добавить обработчик контекста шаблона staticfiles:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.static',
)

Это сделает переменную STATIC_URL доступной в ваших шаблонах, чтобы вы могли ссылаться на свои ресурсы с помощью чего-то вроде {{ STATIC_URL }}css/style.css

Все ваши статические ресурсы также должны быть помещены в каталог уровня приложения с именем "static". Фактический «статический» каталог корневого уровня проекта никогда не используется напрямую. Это просто место, где команда управления collectstatic сбрасывает все ваши статические ресурсы для использования в работе.

Если вам нужны статические ресурсы всего проекта (не привязанные к какому-либо конкретному приложению), вам потребуется совершенно отдельный каталог (т. Е. Не такой, как MEDIA_ROOT или STATIC_ROOT). Я склонен использовать один под названием «активы». Затем вам нужно будет указать Django, чтобы он искал здесь статические ресурсы, а также установил STATICFILES_DIRS:

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), 'assets'), # or whatever you named it
)

MEDIA_ROOT / MEDIA_URL теперь используются только для пользовательских загрузок (например, любой файл, созданный с помощью FileField s и ImageField s, так что он вам все еще нужен, но вы никогда не будете ничего хранить там вручную.

Когда вы дойдете до производства, ваш веб-сервер должен будет обслуживать как MEDIA_ROOT и STATIC_ROOT при MEDIA_URL и STATIC_URL соответственно. Вам также нужно будет запустить:

$ python manage.py collectstatic

Чтобы Django скомпилировал все ваши статические файлы в каталог, указанный в STATIC_ROOT.

6 голосов
/ 09 декабря 2015

работает с django 1.8 - 1.11:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

https://docs.djangoproject.com/en/1.11/howto/static-files/#serving-files-uploaded-by-a-user-during-development

обратите внимание, что документация Django гласит, что это

не подходит для производственного использования

(очевидно, , если вы не используете if settings.DEBUG: part )

4 голосов
/ 07 февраля 2012

На сервере разработки эта страница может вам помочь.https://docs.djangoproject.com/en/1.2/howto/static-files/

Добавляя следующий код в urls.py:

if settings.DEBUG:
    urlpatterns += patterns('', 
        (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/media'}),
    )
0 голосов
/ 16 марта 2015

С python-django 1.7 я использовал

 if settings.DEBUG:
        urlpatterns = patterns('',
            (r'^$', 'blenderx3d.first_step.views.index'),
            (r'^media/(?P<path>.*)$','django.contrib.staticfiles.views.serve'),)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...