2012-01-26 4 views
3

Я боюсь, что я в затруднении здесь, я проверил некоторые подобные вопросы, но ни один из них, похоже, не применяется.Сайт Django в разработке: CSS не загружается для всех страниц

Я запускаю сервер развития django на своем ноутбуке. Я использую его для обслуживания статических файлов. У меня есть папка в статическом корне, которая содержит CSS для 2 шаблонов, называемых 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 (не найдено)

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

Любая помощь будет оценена.

+0

Я знаю, что это глупый вопрос, но действительно ли файл * в * этом каталоге? Попробуйте загрузить его прямо в своем браузере. Если вы получаете 404, ну, ... –

+0

Поскольку он запускает их на сервере Django dev, он должен иметь возможность видеть запросы в самих окнах сервера вместе со своими соответствующими кодами ответов. –

+0

Я получаю следующий вывод из окна сервера: «GET/Static/css/photoologue/css HTTP/1.1" 404 1745 Файл загружается непосредственно в браузер. – Maarten

ответ

12

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

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

У вас есть правильные настройки параметров, но вы можете неправильно понять цель STATIC_ROOT. STATIC_URL - это полный или относительный URL для ваших статических файлов. STATIC_ROOT - это папка, в которой в конечном итоге будут храниться все статические файлы. Он должен быть пустым. Django отвечает за его заполнение через manage.py collectstaticcommand. Идея заключается в том, что каждое приложение в вашем проекте Django имеет свою собственную статическую/папку с ресурсами js/css/image, которые ему нужны. Кроме того, Django будет собирать статические активы для администратора и любых других сторонних пакетов, которые вы используете. Все эти активы будут организованы в вашу папку 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 имеет photologue/static/css/photologue.css. Вы можете поместить общие ресурсы в папку base/static/.

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

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

  1. href="{{ STATIC_URL }}css/photologue.css". Эта переменная будет в ваших шаблонах, если вы включите «django.core.context_processors.static» в свои TEMPLATE_CONTEXT_PROCESSORS.
  2. Используйте templatetag: {% 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

+0

Спасибо за очень четкое объяснение! Я опустошил папку, обозначенную как STATIC_ROOT, и исправленную urls.py. Я использовал вариант 2 из вашего ответа выше. В моих папках приложений уже была статическая вложенная папка (app/static/css и т. Д.). теперь файлы css теперь обслуживаются надлежащим образом. django-markitup теперь работает в admin, но я посмотрю, смогу ли я решить это самостоятельно, чтобы задать другой вопрос. еще раз спасибо. – Maarten

+0

Спасибо за объяснение, только что начав с Django, и это исправило мою проблему! – adefran83

0

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

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

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

0

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

  1. открыть settings.py и

-add это в первой строке файла:

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. создать папку с именем "статика" в корневом каталоге проекта.
  2. создайте папку для ваших статических файлов, таких как css, javascript и т. Д. Я рекомендую вам использовать другую папку для разных типов файлов.
  3. открыть ссылки.пе ваш проект -Добавить это ваш импорт: Параметры импорта -Добавить это для шаблонов URL:

    (г '(* /) (P (CSS | JQuery | jscripts | изображение?.???) /. +) $ ',' django.views.static.serve ', {' document_root ': settings.STATIC_ROOT}),

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

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

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

<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

Использование STATIC_ROOT в шаблоне неверно; он должен быть STATIC_URL, а перед ним «/» также неверен. Кроме того, заполнение «статической» папки в корне проекта не будет работать с парадигмой 'collectstatic'. Эта папка является точкой сбора. Когда вы запустите 'manage.py collectstatic', вы увидите такое сообщение:« Вы попросили собрать статические файлы в месте назначения, как указано в вашем файле настроек. Это перезапишет существующие файлы. Вы уверены, что хотите сделать это?" – JCotton

1

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

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

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

  • Вы, наверное, не установить/статический/псевдоним в вашем апача конфигурации.

Добавьте эту строку в файл /etc/apache2/httpd.conf или/и т.д./apache2/сайты-доступные/myDjangoConfig:

Alias /static/ {valueOfSTATIC_ROOT} 

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

sudo service apache2 reload 
Смежные вопросы