Как Pinax учится обращаться к файлам CSS в базовом проекте учетных записей? - PullRequest
1 голос
/ 07 февраля 2012

Я только начал использовать Pinax 0.9a2.Базовая конфигурация и развернутый «аккаунт» проекта.Я заметил, что в установленных приложениях у меня есть "pinax_theme_bootstrap".Основная страница отображается правильно, с CSS для основной темы приложения.Если я просматриваю источник страницы, среди прочего, у меня есть это для css

http://localhost:8000/site_media/static/css/bootstrap.min.css

Дело в том, что я нигде не могу найти, откуда взялась эта строка, никак это на самом деле служил.Я понимаю, что оно, вероятно, генерируется приложением pinax_theme_bootstrap, но я не понимаю: как должно работать это приложение, если в нем нет urls.py для разрешения вышеуказанной строки и доставки файла?

Файл присутствует и находится в полном пути здесь

MacQuela:~/Work/Projects/test/test/lib/python2.7/site-packages/pinax_theme_bootstrap/static/css $ ls
bootstrap.min.css extra.css

Это файл settings.py, когда речь идет о статических объявлениях

STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static")

# URL that handles the static files like app media.
# Example: "http://media.lawrence.com"
STATIC_URL = "/site_media/static/"

# Additional directories which hold static files
STATICFILES_DIRS = [
    os.path.join(PROJECT_ROOT, "static"),
]

STATICFILES_FINDERS = [
    "staticfiles.finders.FileSystemFinder",
    "staticfiles.finders.AppDirectoriesFinder",
    "staticfiles.finders.LegacyAppDirectoriesFinder",
    "compressor.finders.CompressorFinder",
]

Где pinax не указаноможно найти этот CSS.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

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

bootstrap.css включен в приложение pinax_theme_bootstrap, как вы можете видеть в шаблоне theme_base.html.: https://github.com/pinax/pinax-theme-bootstrap/blob/master/pinax_theme_bootstrap/templates/theme_base.html

Он ссылается на статическое местоположение django, которое определяется из ваших настроек settings.py.Теперь тот факт, что вы на самом деле видите уменьшенную версию этого файла в слегка измененном месте, заставляет меня поверить, что у вас есть другое приложение django static *, которое выполняет минификацию css / js для вас.Скорее всего, это приложение compressor, которое минимизирует.

update

На самом деле вас смущает то, как django обслуживает статические файлы: https://docs.djangoproject.com/en/dev/howto/static-files/

Здесь нет черной магии.Это очень просто.Каждое приложение в вашем проекте может содержать свой собственный каталог static /, который будет содержать статический носитель для этого приложения.В вашем файле settings.py, а также в приведенной выше ссылке вы заметите, что существует комбинация параметров STATIC и других включений, таких как средства поиска.Они найдут статический носитель под каждым приложением.И это также позволяет приложениям не знать весь абсолютный URL.Вместо этого они могут использовать {{STATIC}} в шаблонах для получения корневого местоположения.

Теперь, когда вы запустите свой dev-сервер с помощью 'runserver', он разрешит все эти статические носители для вас.Вот почему начальная загрузка CSS находится.На него ссылаются в theme_base.html как статический URL.

Когда вы будете готовы к работе, вы, очевидно, больше не будете использовать сервер разработчика django.Затем вы в конечном итоге запустите команду типа «./manage.py collectstatic», которая соберет все статические носители в одно место, которое затем вы сможете отправить на сервер через выбранный вами веб-сервер.Я надеюсь, это прояснит это для вас.Об этом лучше прочитать в документации по django, так как pinax - это django.

1 голос
/ 07 февраля 2012
  1. Использование Pinax django-staticfiles обслуживает статические файлы.Вы можете найти переменные STATIC_ROOT, STATICFILES_DIRS, STATICFILES_FINDERS в settings.py.

  2. В базовом проекте учетной записи Pinax url.py вы можете найти строку, подобную этой: url(r"", include("staticfiles.urls")), это определяет статический доступ к файлу.

  3. Получить лучшее представление, django-statifiles переписать команду Django по умолчанию runserver в режиме отладки, переписать Django по умолчаниюWSGIHandler с StatifFilesHandler.Поэтому, когда вы запускаете python manage.py runserver и получаете доступ к сайту, он определяет, является ли запрос статическим запросом файла, если он истинен, он находит файл, сохраненный в параметре STATICFILES_DIRS (с использованием staticfiles.finders.FileSystemFinder) и подкаталоге staticкаждого приложения (используя staticfiles.finders.AppDirectoriesFinder) в INSTALLED_APPS.

  4. Здесь pinax_theme_bootstrap - это приложение Django, которое содержит статические файлы только в каталоге static и по умолчанию устанавливается базовым проектом учетной записи pinax.Доступ к статическим файлам разрешается приложением staticfiles, поэтому вы не можете найти файл urls.py в pinax_theme_bootstrap.

  5. Когда вы хотите развернуть проект в продуктесреда.Вы должны использовать команду python manage.py collectstatic, чтобы собрать все ваши полезные статические файлы в каталоге STATIC_ROOT.И затем вы можете обслуживать этот каталог с помощью Nginx или другого http-сервера.


При доступе к http://localhost:8000/site_media/static/css/bootstrap.min.css, тогда Django будет сопоставлять этот URL в urls.py,каждая конкретная конфигурация не будет соответствовать до последней staticfiles конфигурации.Таким образом, этот доступ будет разрешен staticfiles.В соответствии с вашей конфигурацией STATICFILES_FINDER, staticfiles сначала найдет каталог static в вашем проекте, если результата нет, то он найдет каждый подкаталог с именем static в INSTALLED_APPS.

...