Статические файлы не загружаются в Django - PullRequest
2 голосов
/ 09 мая 2011

Я прекратил создавать новый проект с django 1.1 и с того времени работал только над уже созданными приложениями.С тех пор я предполагаю, что статическая подача как-то изменилась ( проект использует Django 1.2.4 ).Я борюсь в течение нескольких часов и безрезультатно, поэтому, если кто-то знает, что я делаю неправильно, пожалуйста, дайте мне знать.

Мои настройки:

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'

SECRET_KEY = '(d9bahjuyy_i-)4b(w9gc5a&s&5jemcn7&b^wrbuemah3p-6^#'

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates'),
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'project',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth",
    "django.core.context_processors.request",
    "django.core.context_processors.media",
    "django.core.context_processors.csrf",
    "django.core.context_processors.i18n",
)

URL:

urlpatterns += patterns('',
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes' : True}),
)

И медиа-файлы находятся в ../project_path/media

В шаблонах я получаю путь {{MEDIA_URL}} в виде / static /, но мои файлы не загружаются.Переход к http://127.0.0.1:8000/static/ (с или без последней косой черты) показывает корневую страницу.Firebug показывает HTML-код страницы вместо файлов JavaScript.Я бы предпочел ошибку 404.В чем проблема?


Перешел на 1,3.Проблема остается.

Ответы [ 2 ]

7 голосов
/ 31 декабря 2011

На всякий случай, если вы используете render_to_response, вы должны передать необязательный третий параметр:

context_instance=RequestContext(request)

, так что полный код выглядит так:

return render_to_response('index.html',{'dict':'ionary'},context_instance=RequestContext(request))

{{STATIC_URL}}работает с RequestContext, в то время как для render_to_response по умолчанию используется Context

3 голосов
/ 09 мая 2011

Если вы используете Django 1.3 django.contrib.staticfiles, приложение будет искать статические файлы в подпапке static всех установленных приложений. Например, staticfiles автоматически выберет следующий код:

yourproject/
    appone/
        static/
            sample.css

Если вы используете django.contrib.staticfiles и STATIC_URL = '/static/' в своем settings.py, вы можете легко получить доступ к CSS по адресу:

http://localhost:8000/static/sample.css

В вашем случае, похоже, что у вас есть статическая папка в папке вашего проекта, я приму следующее:

yourproject/
    static/

Если вы хотите, чтобы staticfiles выбрал вышеперечисленное, уберите из urls.py следующее:

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

Добавьте следующее к вашему settings.py:

import os
SITE_ROOT = os.path.realpath(os.path.dirname(__file__))

STATICFILES_DIRS = (
    os.path.join(SITE_ROOT, 'static'),
)

В вашем шаблоне вы можете начать использовать STATIC_URL вместо MEDIA_URL, если они оба не указывают на одно и то же значение.

Вы можете узнать больше о статических файлах в Django 1.3 .

...