Сайт Django в разработке: CSS не загружается для всех страниц - PullRequest
3 голосов
/ 27 января 2012

Боюсь, что я в растерянности, я проверил некоторые похожие вопросы, но, похоже, ни один из них не подходит.

Я использую сервер разработки django на своем ноутбуке. Я использую его для обслуживания статических файлов. У меня есть папка в статическом корне, которая содержит CSS для двух шаблонов, которые называются base.html.

это головной раздел того, который работает:

<head>
    <title>| Entries | Latest entries</title>
    <link rel="stylesheet" type="text/css" href="/static/css/serenity.css" />
</head>

вот тот, который не:

<head>
    <title>Latest Photo Galleries</title>
    <link rel="stylesheet" type="text/css" href="/static/css/photologue.css" />
</head>

urls.py:

    (r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_ROOT}),

и статический URL:

    STATIC_URL = '/static/'

STATIC_ROOT - это абсолютный путь.

когда я смотрю на источник и пытаюсь открыть ссылку на css, я получаю 404 (не найдено)

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

Буду признателен за любую помощь.

Ответы [ 4 ]

12 голосов
/ 27 января 2012

То, как вы используете staticfiles, немного неверно.Хотя я не могу точно сказать, что является причиной вашей текущей ситуации, я могу сказать, что ваш метод вызовет у вас головную боль в будущем.Но обо всем по порядку, я согласен с комментариями о просмотре трафика ваших запросов в терминале сервера DjangoИщите ответы 4xx и убедитесь, что запрошенный URL-адрес правильный.Это: /Static/css/photologue/css содержит две ошибки.

Если вы не хотите читать дальше, удалите строку urls.py static.server и посмотрите на серверный терминал.Теперь, вот как все это работает ...

Вы правильно установили переменные настроек, но можете неправильно понять цель STATIC_ROOT .STATIC_URL - это полный или относительный URL для ваших статических файлов.STATIC_ROOT - это папка, в которой будут храниться все статические файлы. Он должен быть пустым .Джанго отвечает за его заполнение с помощью команды manage.py collectstatic .Идея состоит в том, что каждое приложение в вашем проекте Django имеет свою собственную папку static / с необходимыми активами js / css / image.Кроме того, Django будет собирать статические ресурсы для Admin и любых других сторонних пакетов, которые вы используете.Все эти ресурсы будут организованы в вашу папку STATIC_ROOT.Не безопасно предполагать, что файлы, которые у вас есть до их сбора, останутся.

STATIC_ROOT = '/path/to/empty/static/folder/'  # or something dynamic with os.path methods
STATIC_URL = '/static/'

В вашем случае, возможно, в вашем приложении для спокойствия установлено serenity/static/css/serenity.css, а в фотологе - photologue/static/css/photologue.css.Вы можете поместить общие ресурсы в папку base/static/.

Теперь для правильного обслуживания статического носителя .Не используйте строку 'django.views.static.serve' в urls.py.runserver Django будет автоматически обслуживать статические файлы .За кулисами он обрабатывает коллективное поведение, собирает все ваши статические активы и подает их.Использование такого типа шаблона URL в Django 1.3 не является необходимым, источником путаницы и того, что по ошибке пойдет в производство.Помните, что ваш веб-сервер (Apache / Nginx) обслуживает статические ресурсы.Ваши файлы Django urls.py не должны ничего знать о них.

Ссылка на статический URL в шаблонах .У вас есть /static/ в ваших шаблонах.Это будет работать (но только потому, что STATIC_URL это то же значение).Чтобы быть более гибким в этом, у вас есть три варианта .

  1. Использование href="{{ STATIC_URL }}css/photologue.css".Эта переменная будет в ваших шаблонах до тех пор, пока вы включите 'django.core.context_processors.static' в ваш TEMPLATE_CONTEXT_PROCESSORS.
  2. Используйте тег тега: {% load static %} ... href="{% get_static_prefix %}css/photologue.css"
  3. В Django 1.4 вы сможете использовать {% load static from staticfiles %}... href="{% static 'css/photologue.css' %}"

Стоит прочитать статические файлы в Django и быть в курсе изменений, которые появятся в Django 1.4

1 голос
/ 03 сентября 2012

Я вижу две проблемы, которые могут произойти:

  • Переменные STATIC не были установлены в вашем файле настроек.

(у вас было много ответов для этого)

  • Вероятно, вы не установили / static / alias в вашем конфиге apache.

Добавьте эту строку в ваш файл /etc/apache2/httpd.conf или / etc / apache2 / sites-available / myDjangoConfig:

Alias /static/ {valueOfSTATIC_ROOT}

Затем перезапустите сервер Apache:

sudo service apache2 reload
0 голосов
/ 27 января 2012

Вы можете попробовать выполнить следующие действия:

  1. открыть ваши settings.py и

- добавить в первую строку вашего файла:

import os.path
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))

- измените значение вашего STATIC_ROOT на:

STATIC_ROOT = os.path.join(PROJECT_DIR, 'static/')

- измените значение вашего STATIC_URL на:

STATIC_URL = '/static/'
  1. создайте папку с именем "static" в корневом каталоге вашего проекта.
  2. создайте папку для ваших статических файлов, таких как css, javascript и т. Д. Я рекомендую использовать другую папку для файлов разных типов.
  3. откройте urls.py вашего проекта-добавить это к импорту: настройки импорта -добавить это к шаблонам URL:

    (r '(?:. *? /)? (? P (css | jquery | jscripts | images) /.+) $ ',' django.views.static.serve ', {' document_root ': settings.STATIC_ROOT}),

    ПРИМЕЧАНИЕ. В этом примере есть папки с именами css, jquery, jscripts и изображения внутри моегостатическая папка.

  4. В шаблон добавьте следующее:

для файлов CSS: (в этом примере default.css - это имя файлаcss fiле)

<link href="{{ STATIC_URL }}css/default.css" rel="stylesheet" type="text/css" media="all" />

для JavaScript:

<script type="text/javascript" src="{{ STATIC_URL }}jquery/jquery.js"></script>
0 голосов
/ 27 января 2012

STATIC_ROOT не используется с сервером разработки Django - только при развертывании на prod или использовании другого сервера.STATIC_ROOT - это место, где ваши статические файлы будут храниться после их сбора (с использованием метода "collectstatic").

Причина, по которой это работает для одного приложения, но не для другого, заключается в том, что одно приложение имеет правильную ссылку на CSSпапка, а другой нет.Для начала попробуйте скопировать «статический» каталог из одного приложения в другое и посмотреть, работает ли он.

Более подробная информация здесь: https://docs.djangoproject.com/en/1.3/howto/static-files/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...