Статические файлы не загружаются в django

#django #static #django-statistics

#django #статические #django-статистика

Вопрос:

Я прекратил создавать новый проект с 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(w9gc5aamp;samp;5jemcn7amp;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 . Проблема остается.

Комментарии:

1. Попробуйте django-staticfiles или, что еще лучше, обновитесь до Django 1.3, который включает улучшенную версию: docs.djangoproject.com/en/1.3/howto/static-files

2. Я переключился на 1.3 и все тот же теперь STATIC_URL пуст.

3. можете ли вы показать больше своих urls.py Я предполагаю, что у вас ранее было регулярное выражение в ваших URL-адресах, которое отслеживает все ваши URL-адреса до достижения вашей статической записи serve.

4. Теперь, когда вы сделали это общедоступным, возможно, вы хотите изменить настройку SECRET_KEY…

Ответ №1:

На всякий случай, если вы используете 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

Ответ №2:

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

 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.