Dark_Knight
@Dark_Knight
Game Dev

Как подключить css стили к Django?

Здравствуйте.

Подскажите пожалуйста, я уже второй день мучаюсь, читал доки, гуглил, но толку мало.

Поставил Джанго, создал проект, все отлично, но как только решил подключить цсс, то…

У меня windows 7, Django 1.4, MySQL

Вот что добавил в код:

#setting.py<br/>
from os.path import join, abspath, normpath, dirname<br/>
<br/>
ProjectDir = dirname(abspath(__file__))<br/>
<br/>
def tpl_dir(src):<br/>
 return normpath(join(ProjectDir, src)).replace('\\', '/') <br/>
<br/>
MEDIA_ROOT = tpl_dir('media')<br/>
MEDIA_URL = '/media/'<br/>
<br/>
STATIC_ROOT = tpl_dir('static')<br/>
STATIC_URL = '/static/'<br/>
<br/>
ADMIN_MEDIA_PREFIX = '/static/admin/'<br/>
<br/>
STATICFILES_DIRS = (tpl_dir('static'),)<br/>
<br/>
TEMPLATE_DIRS = (tpl_dir('templates'),)<br/>


#urls.py<br/>
from django.conf import settings<br/>
<br/>
if settings.DEBUG:<br/>
 urlpatterns += patterns('',(r'^robots.txt$', 'django.views.static.serve',<br/>
 {'document_root': settings.MEDIA_ROOT, 'path': &quot;robots.txt&quot;}),<br/>
 (r'^favicon.ico$', 'django.views.static.serve',<br/>
 {'document_root': settings.MEDIA_ROOT, 'path': &quot;favicon.ico&quot;}),<br/>
 (r'^media/(?P.*)$', 'django.views.static.serve',<br/>
 {'document_root': settings.MEDIA_ROOT}),<br/>
 )<br/>
<br/>
<code>#base.html<br/>
<br/>
link rel=&quot;stylesheet&quot; href=&quot;{{ STATIC_URL }}css/style.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; /<br/>
</code><br/>
Но ничего не происходит. Надпись должна стать красной.<br/>
<br/>
Подскажите пожалуйста, что я делаю не так.<br/>
Спасибо
  • Вопрос задан
  • 17735 просмотров
Решения вопроса 1
@kmike
Проблема в неправильной настройке STATIC_ROOT и STATICFILES_DIRS.

STATIC_ROOT — это временная папка, куда статика собирается в продакшне командой ./manage.py collectstatic. При разработке она может быть пустой. Я обычно ее «collected_static» называю, и делаю где-нибудь папку

files
    user_uploads      <- сюда указывает MEDIA_ROOT
    collected_static   <- сюда указывает STATIC_ROOT


STATICFILES_DIRS — это список папок, в которых хранится общая статика проекта, и из которых она собирается в STATIC_ROOT командой ./manage.py collectstatic.

Кроме папок из STATICFILES_DIRS collectstatic по умолчанию смотрит еще в папку static у каждого приложения из INSTALLED_APPS.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@marazmiki
Укротитель питонов
Начиная с версии 1.3, в Джанге по умолчанию используется django.contrib.staticfiles — отличное приложение, упрощающее работу со статикой проекта.

В режиме разработки, то есть когда runserver запускаете, это приложение ловит все запросы, которые начинаются на STATIC_URL и ищет запрошенный файл без этого префикса в папке static каждого приложения в INSTALLED_APPS.

Не вдаваясь в подробности, которые прекрасно описаны в манулае, могу вот что посоветовать: сделайте приложение с именем, например, sitemedia, подключите его в INSTALLED_APPS, внутри этого приложения создайте директорию static и поскидайте всю статику туда.

Обратите внимание только: статику, а не медиа! Это разные директории для разных целей.

И ещё: в 1.4 ADMIN_MEDIA_PREFIX не используется.
Ответ написан
scream4ik
@scream4ik
навскидку в urlpatterns нету STATIC_URL
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы