Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 23, 2011 13:44:30

beam018
От:
Зарегистрирован: 2011-05-31
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

static'а в Django

очередной вопрос про статику

сделал следующее:

# 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



Отредактировано (Окт. 24, 2011 18:13:11)

Офлайн

#2 Окт. 23, 2011 16:27:58

feather236
От:
Зарегистрирован: 2011-10-22
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

static'а в Django

Сам только учусь, дельного совета дать не могу, но у меня был похожий случай. Оказалось дело в слэшах, то ли лишний стоял, то ли стоял там, где не нужно ставить, не помню.



Офлайн

#3 Окт. 23, 2011 16:29:42

beam018
От:
Зарегистрирован: 2011-05-31
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

static'а в Django

спасибо конечно), но в слэшах на первый взгляд все в порядке
можете скинуть пример (как у вас это реализовано)?

есть подозрение что у меня косяк в структуре каталогов
static должен лежать в каталоге проекта (как сейчас) или в каталоге приложения?



Отредактировано (Окт. 23, 2011 16:37:32)

Офлайн

#4 Окт. 23, 2011 19:07:09

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

static'а в Django

ты уверен что в приложении есть каталог статик?

Офлайн

#5 Окт. 23, 2011 20:47:04

beam018
От:
Зарегистрирован: 2011-05-31
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

static'а в Django

вот прямо сейчас я его туда положил (уже не в первый раз кстати, я уже рассматривал этот вариант)
результат остался тем же



Офлайн

#6 Окт. 24, 2011 12:05:37

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

static'а в Django

в INSTALLED_APPS я нкиаких приложений не вижу

Офлайн

#7 Окт. 24, 2011 12:13:22

unkier
От:
Зарегистрирован: 2009-11-05
Сообщения: 92
Репутация: +  2  -
Профиль   Отправить e-mail  

static'а в Django

недавно с этим голову ломал. пришел к выводу что в дебуге из коробки раздаётся только из медии но при этом админка пашет и там видно что раздаётся из статики всё что касается админки. но если что то положить в статику то он не раздаётся. видимо оно всё таки не из папки static раздаётся. из медии у меня нормально раздаётся в дебуге.



Отредактировано (Окт. 24, 2011 12:14:02)

Офлайн

#8 Окт. 24, 2011 18:20:48

beam018
От:
Зарегистрирован: 2011-05-31
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

static'а в Django

поправил код в первом посте
(добавил приложение в 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)

Офлайн

#9 Окт. 24, 2011 19:49:30

magnet85
От:
Зарегистрирован: 2009-04-13
Сообщения: 91
Репутация: +  2  -
Профиль   Отправить e-mail  

static'а в Django

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, тоже отдавались.



Офлайн

#10 Окт. 25, 2011 01:09:28

beam018
От:
Зарегистрирован: 2011-05-31
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

static'а в Django

Спасибо. Наконец-то разобрался.
Все работает.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version