Найти - Пользователи
Полная версия: static'а в Django
Начало » Django » static'а в Django
1 2
beam018
очередной вопрос про статику

сделал следующее:
# 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>
при переходе к localhost:8000/static/css/style.css
получаю 404

читал:
документацию
это форум
и этот форум

так и не сообразил в чем проблема.
помогите найти косяк.

django 1.3, ubuntu 11.10
feather236
Сам только учусь, дельного совета дать не могу, но у меня был похожий случай. Оказалось дело в слэшах, то ли лишний стоял, то ли стоял там, где не нужно ставить, не помню.
beam018
спасибо конечно), но в слэшах на первый взгляд все в порядке
можете скинуть пример (как у вас это реализовано)?

есть подозрение что у меня косяк в структуре каталогов
static должен лежать в каталоге проекта (как сейчас) или в каталоге приложения?
slav0nic
ты уверен что в приложении есть каталог статик?
beam018
вот прямо сейчас я его туда положил (уже не в первый раз кстати, я уже рассматривал этот вариант)
результат остался тем же
slav0nic
в INSTALLED_APPS я нкиаких приложений не вижу
unkier
недавно с этим голову ломал. пришел к выводу что в дебуге из коробки раздаётся только из медии но при этом админка пашет и там видно что раздаётся из статики всё что касается админки. но если что то положить в статику то он не раздаётся. видимо оно всё таки не из папки static раздаётся. из медии у меня нормально раздаётся в дебуге.
beam018
поправил код в первом посте
(добавил приложение в 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 ошибки - его и вывело
magnet85
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
С помощью этой команды ты соберёш всю статику в папку STATIC_ROOT
В urls.py ничего для статики не пишешь, для нее достаточно в installed_apps прописать ‘django.contrib.staticfiles’,
единственное, если используешь встроенный сервер, то можешь прописать
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT}),
)
чтобы файлы из папки media, тоже отдавались.
beam018
Спасибо. Наконец-то разобрался.
Все работает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB