Используем 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
    

    Похожие публикации

    Средняя зарплата в IT

    113 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 5 314 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    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.

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

                  Самое читаемое