Используем 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
    
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 18
    • 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
                  • 0
                    Так конечно проще, но только, если установлен bower и nodejs. django-bower работает напрямую.
                    • 0

                      В смысле напрямую? Ему тоже нужен установленный nodejs и bower.
                      Другое дело, я не очень понимаю плюсы такой интеграции, потому что один фиг подключать нужные js и css файлы (и другую статику) приходится пофайлово стандартным образом. Т.е. нельзя написать что-нибудь вроде {% bower_static "jquery" %} И ещё вопрос вот сейчас решаю, как это всё подружить с django-pipeline.

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