#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.