Пользователь
0,0
рейтинг
12 июня 2013 в 20:26

Разработка → Используем bower в django проектах с django-bower



Многим уже надоело лазить по куче сайтов и скачивать js библиотеки и плагины. Да и таскать когда-то скачанные, но уже давно протухшие версии не очень круто. Эти проблемы решает bower.

Но с ним тоже многое нужно делать вручную: следить за components каждого проекта, руками дёргать bower install. После pip с requirements.txt это делать даже как-то лень.

Поэтому представляю вам django-bower, который берёт на себя установку и обновление bower пакетов по списку из settings и прозрачную работу с staticfiles.

Установка


Для начала у вас должен быть установлен bower, инструкция есть на официальном сайте.

Вам нужно поставить пакет django-bower из pypi:
pip install django-bower

Добавить приложение в INSTALLED_APPS в settings:
'djangobower',

Подключить его в STATICFILES_FINDERS:
'djangobower.finders.BowerFinder',

И прописать путь до components — место, где хранятся установленные пакеты. Путь должен быть абсолютным и существовать:
BOWER_COMPONENTS_ROOT = '/PROJECT_ROOT/components/'

Вы можете посмотреть пример настроек в demo проекте.

Использование


Для использования пакетов пропишите их в BOWER_INSTALLED_APPS в settings, например:
BOWER_INSTALLED_APPS = (
    'jquery#2',
    'underscore',
)

И установите их с менедж командой bower_install, впоследствии можно использовать её для обновления пакетов:
./manage.py bower_install

Теперь можно подключить скрипт в шаблоне:
{% load static %}
<script type="text/javascript" src='{% static 'jquery/jquery.js' %}'></script>

В продакшене bower_install нужно делать перед collectstatic:
./manage.py bower_install
./manage.py collectstatic

Для получения BOWER_INSTALLED_APPS с фиксированными версиями пакетов используйте bower_freeze:
./manage.py bower_freeze
Яковлев Владимир @nvbn
карма
73,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (16)

  • 0
    Что-то не нашёл как замораживать версии.
    Без них совсем несерьёзно.
    • +2
      <package>#<version> в BOWER_INSTALLED_APPS, в статье так jquery прописан.
    • 0
      в последнем из своих проектов заинтересовался в bower и решил эту проблему вот так
      "dependencies": {
          "requirejs": "latest",
          "jquery": "1.9.1",
          "backbone-amd": "latest",
          "underscore-amd": "latest"
        }
      
    • 0
      Добавил bower_freezee, который выводит что-то такое:

      BOWER_INSTALLED_APPS = ('backbone#0.9.0', 'jquery#2.0.2', 'underscore#1.4.4')
      
  • +1
    Нужен аналог bower install xxx --save.
    Без него некомильфо )
    • 0
      BOWER_INSTALLED_APPS аналогичен создаваемому bower.json, только пишется заранее и требует немного меньше телодвижений.
      • 0
        Я про сохранение в списке по инсталлу с ключем, а не про сам список.
        У pip такого нет и это печально
        • 0
          Это было бы печально если б pip хранил список в виде json или xml, а так это не такая уж проблема.
  • +1
    ./manage.py bower_install

    если все равно нужно что-то вызывать, в чем преимущество по сравнению с тупо «bower install»?
    • 0
      если все равно нужно что-то вызывать, в чем преимущество по сравнению с тупо «bower install»?

      Есть небольшая разница между:
      ./manage.py bower_install
      

      и:
      cd COMPONENTS_HOLDER
      bower install jquery underscore backsbone etc
      

      , не?)
      • +2
        Все это можно настроить в конфиге: и куда ставить и что ставить. Потом просто bower install.
        • 0
          Как? Возможно вовремя это не нашёл и сделал велосипед =)
          • +4
            .bowerrc (локальные настройки bower)
            {
              "directory": "path/to/assets"
            }
            

            bower.json (bower install whatever --save установит пакет и сохранит зависимость)
            {
              "name": "sample",
              "version": "0.0.0",
              "ignore": [
                "**/.*",
                "node_modules",
                "components"
              ],
              "dependencies": {
                "angular": "~1.0.7"
              }
            }
            


            Теперь bower install скачает все что нужно и поместит куда нужно.

            Недостатки:
            Справедливости ради стоит заметить что настройки можно было бы и в bower.json держать, а не в отдельном файле
            Немного жаль что не все версии библиотеки сразу доступны через bower (например последняя доступная версия angular 1.0.7).

            PS В ближайшее время собираюсь опубликовать небольшой гайд по настройке удобного рабочего места и окружения под linux для верстальщиков и front end разработчиков. Тем кто и так знает как это делается пользы никакой, а начинающим может пригодиться.
            • +1
              В велосипеде вышло почти тоже самое, только в джанговских сеттингсах и с работой с statifiles =)
  • –2
    Ребят придется оффтопить, загрузите кто-нибудь уже установленную и настроенную Django CMS (в зипе с базой данных, и напишите логин и пароль админа- не получается поставить, и нет гуи установщика как в других цмс, куча ошибок, в нете спрашивал — никто не может помочь. винда 7, питон 2.7.5
    (вот к примеру пост на стэковерфлоу, решение так и не найдено stackoverflow.com/questions/17066502/django-cms-installation-no-welcome-page-and-500-server-error?noredirect=1#comment24708878_17066502)
  • +1
    решил воспользоваться bower в новом проекте, попробовал сначала django-bower, но в итоге остановился на чистом bower:

    рядом с manage.py создал bower.json с необходимым содержимым, далее bower install ставит зависимости в директорию bower_components, которую нужно добавить в STATICFILES_DIRS.

    Никаких дополнительных команд больше не нужно, статика находится, а collectstatic собирает всё, что нужно в STATIC_ROOT

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.