Форум сайта python.su
очередной вопрос про статику
сделал следующее:
# Django settings
def rel(*x):
return os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)
MEDIA_ROOT = rel('media')
MEDIA_URL = '/media/'
STATIC_ROOT = rel('static')
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages",
)
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',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
'app.news',
)
from django.conf.urls.defaults import patterns, include, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.views.generic.simple import direct_to_template
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', direct_to_template, {'template': 'base.html'}),
url(r'^admin/', include(admin.site.urls)),
)
urlpatterns += staticfiles_urlpatterns()
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="">
<meta name="publisher-email" content="">
<!--<meta name="copyright" content="">-->
{% load static %}{% get_static_prefix as STATIC_PREFIX %}
<link href="{{ STATIC_PREFIX }}css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="">
<meta name="publisher-email" content="">
<!--<meta name="copyright" content="">-->
<link href="/static/css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
</body>
</html>
Отредактировано (Окт. 24, 2011 18:13:11)
Офлайн
Сам только учусь, дельного совета дать не могу, но у меня был похожий случай. Оказалось дело в слэшах, то ли лишний стоял, то ли стоял там, где не нужно ставить, не помню.
Офлайн
спасибо конечно), но в слэшах на первый взгляд все в порядке
можете скинуть пример (как у вас это реализовано)?
есть подозрение что у меня косяк в структуре каталогов
static должен лежать в каталоге проекта (как сейчас) или в каталоге приложения?
Отредактировано (Окт. 23, 2011 16:37:32)
Офлайн
ты уверен что в приложении есть каталог статик?
Офлайн
вот прямо сейчас я его туда положил (уже не в первый раз кстати, я уже рассматривал этот вариант)
результат остался тем же
Офлайн
в INSTALLED_APPS я нкиаких приложений не вижу
Офлайн
недавно с этим голову ломал. пришел к выводу что в дебуге из коробки раздаётся только из медии но при этом админка пашет и там видно что раздаётся из статики всё что касается админки. но если что то положить в статику то он не раздаётся. видимо оно всё таки не из папки static раздаётся. из медии у меня нормально раздаётся в дебуге.
Отредактировано (Окт. 24, 2011 12:14:02)
Офлайн
поправил код в первом посте
(добавил приложение в INSTALLED_APPS, раньше его не было в листинге, однако в проекте оно присутствовало)
выключил дебаг
теперь при обращении к файлу со стилями получаю:
Traceback (most recent call last):
File “/usr/lib/pymodules/python2.7/django/core/servers/basehttp.py”, line 283, in run
self.result = application(self.environ, self.start_response)
File “/usr/lib/pymodules/python2.7/django/core/handlers/wsgi.py”, line 273, in __call__
response = self.get_response(request)
File “/usr/lib/pymodules/python2.7/django/core/handlers/base.py”, line 153, in get_response
response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
File “/usr/lib/pymodules/python2.7/django/core/handlers/base.py”, line 218, in handle_uncaught_exception
return callback(request, **param_dict)
File “/usr/lib/pymodules/python2.7/django/utils/decorators.py”, line 93, in _wrapped_view
response = view_func(request, *args, **kwargs)
File “/usr/lib/pymodules/python2.7/django/views/defaults.py”, line 30, in server_error
t = loader.get_template(template_name) # You need to create a 500.html template.
File “/usr/lib/pymodules/python2.7/django/template/loader.py”, line 157, in get_template
template, origin = find_template(template_name)
File “/usr/lib/pymodules/python2.7/django/template/loader.py”, line 138, in find_template
raise TemplateDoesNotExist(name)
TemplateDoesNotExist: 500.html
“GET /static/css/style.css HTTP/1.1” 500 1274
при этом html грузится нормально
P.S. трэйсы оформлять как код? или выкладывать как простой текст?
UDP: добавил шаблон для 500 ошибки - его и вывело
Отредактировано (Окт. 24, 2011 18:27:01)
Офлайн
STATIC_ROOT - эта папка в которую staticfiles будет собирать всю статику, вручную туда копировать ничего не нужно
STATIC_URL - префикс для статики, типа 127.0.0.1/static/1.png
STATICFILES_DIRS = (
# Тут ты указываешь все директории где лежит твоя статика, соответственно сюда кладешь свои файлы
os.path.join(PROJECT_DIR, ‘my_static’),
)
После всего этого, перед запуском выполняешь:
python manage.py collectstatic
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT}),
)
Офлайн
Спасибо. Наконец-то разобрался.
Все работает.
Офлайн