SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Работа со статикой в
      Django
Проблемы

•   количество файлов статики на странице

•   размеры файлов

•   Less, Stylus => CSS

•   Co3eeScript, ClojureScript => JavaScript

•   компиляция шаблонов на клиенте
К чему они приводят
•   появляется огромный script.js (style.css), в
    котором много тысяч строк

•   комментариев нет

•   код плохо читается

•   табуляция вместо пробелов (экономия
    байтов же!)

•   Less, Co3eeScript и т.п. не используются
Что нужно от
           инструмента
•   объединение файлов статики в один

•   минификация и gzip-сжатие кода

•   поддержка Less, Stylus, Co3eeScript и т.д.

•   прозрачная и незаметная работа

•   удобная отладка
Что уже есть

•   django_compressor

•   webassets

•   другие библиотеки, похожие на webassets

•   django-gears (порт Sprockets)
django_compressor
{% load compress %}
{% compress js %}
  <script src="/static/js/models.js"></script>
  <script src="/static/js/collections.js"></script>
  <script src="/static/js/views.js"></script>
  <script src="/static/js/router.js"></script>
  <script src="/static/js/application.js"></script>
{% endcompress %}

<!-- на выходе будет нечто подобное: -->

<script src="/static/CACHE/js/34fe95a4b234.js"></
    script>
webassets
register('application', Bundle(
    'js/models.js',
    'js/collections.js',
    'js/views.js',
    'js/router.js',
    'js/application.js',
    output='js/gen/application.js',
))

# в шаблоне:

{% load assets %}
{% assets "application" %}
  <script src="{{ ASSET_URL }}"></script>
{% endassets %}
django-gears
/*
 * application.js
 *
 * =require models
 * =require collections
 * =require_directory templates
 * =require views
 * =require router
 */

$(function() {
  new Router();
  Backbone.history.start({pushState: true});
});
django-gears


<script src="{{ STATIC_URL }}js/application.js"></script>
django-gears: отладка


{% load gears %}
{% js_asset_tag "js/application.js" %}
django-gears: отладка
<!-- DEBUG = True -->

<script   src="/static/js/models.js?body=1"></script>
<script   src="/static/js/collections.js?body=1"></script>
<script   src="/static/js/views.js?body=1"></script>
<script   src="/static/js/router.js?body=1"></script>
<script   src="/static/js/application.js?body=1"></script>


<!-- DEBUG = False -->

<script src="/static/js/application.js"></script>
django-gears


•   http://git.io/gears

•   обертка над библиотекой Gears

•   еще есть Flask-Gears и gears-cli
Зависимости

•   require

•   require_self

•   require_directory

•   require_tree (скоро)

•   depend_on (скоро)
Компиляция в CSS и JS
•   Из коробки поддерживаются:

     •   Less
     •   Stylus
     •   Co3eeScript
     •   Handlebars

•   Цепочка расширений определяет процедуру
    компиляции:

     •   application.js.co3ee
     •   style.css.styl
Минификация

•   slimit (Python)

•   cssmin (Python)

•   UglifyJS (node.js)

•   clean-css (node.js)
Использование


python manage.py runserver
Использование


python manage.py collectassets
python manage.py collectstatic
Спасибо за внимание
                   Вопросы?


•   @yumatov

•   http://trilandev.com

•   https://github.com/yumike

•   https://github.com/trilan

Contenu connexe

Tendances

практическое использование модуля Panels богуцкий виктор
практическое использование модуля Panels богуцкий викторпрактическое использование модуля Panels богуцкий виктор
практическое использование модуля Panels богуцкий викторdrupalconf
 
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongoekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongoit-people
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBStepan Stolyarov
 
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный вебHappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный вебHappyDev-lite
 
How to optimize Magento
How to optimize MagentoHow to optimize Magento
How to optimize MagentoMageCloud
 
Кузьмін Віталій “Оптимізація і конфігурування Magento для високонавантажених ...
Кузьмін Віталій “Оптимізація і конфігурування Magento для високонавантажених ...Кузьмін Віталій “Оптимізація і конфігурування Magento для високонавантажених ...
Кузьмін Віталій “Оптимізація і конфігурування Magento для високонавантажених ...Lviv Startup Club
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
Java script и frontend завтра - Kharkiv JS 2013
Java script и frontend завтра - Kharkiv JS 2013Java script и frontend завтра - Kharkiv JS 2013
Java script и frontend завтра - Kharkiv JS 2013Andrey Listochkin
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныCodeFest
 
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24MoscowJS
 
Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2Vasiliy Vanchuck
 
Current State of Server Side JavaScript
Current State of Server Side JavaScriptCurrent State of Server Side JavaScript
Current State of Server Side JavaScriptOleg Podsechin
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Fwdays
 
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥CodeFest
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Ontico
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановMoscowJS
 
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)xasima
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpacklgordey
 
JavaScript + Webdriver = ♥
JavaScript + Webdriver = ♥ JavaScript + Webdriver = ♥
JavaScript + Webdriver = ♥ SQALab
 

Tendances (20)

практическое использование модуля Panels богуцкий виктор
практическое использование модуля Panels богуцкий викторпрактическое использование модуля Panels богуцкий виктор
практическое использование модуля Panels богуцкий виктор
 
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongoekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
 
Серверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDBСерверный JavaScript: NodeJS и CouchDB
Серверный JavaScript: NodeJS и CouchDB
 
Node
NodeNode
Node
 
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный вебHappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
 
How to optimize Magento
How to optimize MagentoHow to optimize Magento
How to optimize Magento
 
Кузьмін Віталій “Оптимізація і конфігурування Magento для високонавантажених ...
Кузьмін Віталій “Оптимізація і конфігурування Magento для високонавантажених ...Кузьмін Віталій “Оптимізація і конфігурування Magento для високонавантажених ...
Кузьмін Віталій “Оптимізація і конфігурування Magento для високонавантажених ...
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Java script и frontend завтра - Kharkiv JS 2013
Java script и frontend завтра - Kharkiv JS 2013Java script и frontend завтра - Kharkiv JS 2013
Java script и frontend завтра - Kharkiv JS 2013
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
 
Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2
 
Current State of Server Side JavaScript
Current State of Server Side JavaScriptCurrent State of Server Side JavaScript
Current State of Server Side JavaScript
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"
 
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
CodeFest 2013. Баяндин А. — JavaScript + Webdriver = ♥
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpack
 
JavaScript + Webdriver = ♥
JavaScript + Webdriver = ♥ JavaScript + Webdriver = ♥
JavaScript + Webdriver = ♥
 

En vedette

Пример fuzzy testing для поиска URL в тексте
Пример fuzzy testing для поиска URL в текстеПример fuzzy testing для поиска URL в тексте
Пример fuzzy testing для поиска URL в текстеMoscowDjango
 
Els mamifers presentacion
Els mamifers presentacionEls mamifers presentacion
Els mamifers presentacioncarolinajimo
 
Cyclone + Eventsource (realtime push-сообщения)
Cyclone + Eventsource (realtime push-сообщения)Cyclone + Eventsource (realtime push-сообщения)
Cyclone + Eventsource (realtime push-сообщения)MoscowDjango
 
Tres tristos traumes
Tres tristos traumesTres tristos traumes
Tres tristos traumescarolinajimo
 
Louis S. Harvey, President & CEO, Dalbar, Inc.
Louis S. Harvey, President & CEO, Dalbar, Inc.Louis S. Harvey, President & CEO, Dalbar, Inc.
Louis S. Harvey, President & CEO, Dalbar, Inc.NICSA
 

En vedette (7)

Пример fuzzy testing для поиска URL в тексте
Пример fuzzy testing для поиска URL в текстеПример fuzzy testing для поиска URL в тексте
Пример fuzzy testing для поиска URL в тексте
 
Els mamifers presentacion
Els mamifers presentacionEls mamifers presentacion
Els mamifers presentacion
 
Golding and the war
Golding and the warGolding and the war
Golding and the war
 
Cyclone + Eventsource (realtime push-сообщения)
Cyclone + Eventsource (realtime push-сообщения)Cyclone + Eventsource (realtime push-сообщения)
Cyclone + Eventsource (realtime push-сообщения)
 
Tres tristos traumes
Tres tristos traumesTres tristos traumes
Tres tristos traumes
 
Manuela grande es.4
Manuela grande es.4Manuela grande es.4
Manuela grande es.4
 
Louis S. Harvey, President & CEO, Dalbar, Inc.
Louis S. Harvey, President & CEO, Dalbar, Inc.Louis S. Harvey, President & CEO, Dalbar, Inc.
Louis S. Harvey, President & CEO, Dalbar, Inc.
 

Similaire à Работа со статикой в Django

Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Регрессионное тестирование верстки
Регрессионное тестирование версткиРегрессионное тестирование верстки
Регрессионное тестирование версткиTalks&Works
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiAlexander Makarov
 
JAM stack - what it is and what's it for
JAM stack - what it is and what's it forJAM stack - what it is and what's it for
JAM stack - what it is and what's it forAlex Stepchenkov
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?buranLcme
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Yandex
 
Тестирование серверной конфигурации
Тестирование серверной конфигурацииТестирование серверной конфигурации
Тестирование серверной конфигурацииTimur Batyrshin
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"Provectus
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерRoman Dvornov
 
Как сделать сайт быстрее?
Как сделать сайт быстрее?Как сделать сайт быстрее?
Как сделать сайт быстрее?Danil Negrienko
 
Оптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияОптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияMedia Gorod
 
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10OdessaFrontend
 

Similaire à Работа со статикой в Django (20)

Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Регрессионное тестирование верстки
Регрессионное тестирование версткиРегрессионное тестирование верстки
Регрессионное тестирование верстки
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
Assets Pipeline
Assets PipelineAssets Pipeline
Assets Pipeline
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
Speed Up Your Website
Speed Up Your WebsiteSpeed Up Your Website
Speed Up Your Website
 
JAM stack - what it is and what's it for
JAM stack - what it is and what's it forJAM stack - what it is and what's it for
JAM stack - what it is and what's it for
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Тестирование серверной конфигурации
Тестирование серверной конфигурацииТестирование серверной конфигурации
Тестирование серверной конфигурации
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
 
Как сделать сайт быстрее?
Как сделать сайт быстрее?Как сделать сайт быстрее?
Как сделать сайт быстрее?
 
Оптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решенияОптимизация времени загрузки сайта: проблемы и решения
Оптимизация времени загрузки сайта: проблемы и решения
 
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
 

Plus de MoscowDjango

Тестирование и Django
Тестирование и DjangoТестирование и Django
Тестирование и DjangoMoscowDjango
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать кодMoscowDjango
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Django на Android
Django на AndroidDjango на Android
Django на AndroidMoscowDjango
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoMoscowDjango
 
Class Based Generic Views в Django
Class Based Generic Views в DjangoClass Based Generic Views в Django
Class Based Generic Views в DjangoMoscowDjango
 
Простой и удобный деплоймент проекта
Простой и удобный деплоймент проектаПростой и удобный деплоймент проекта
Простой и удобный деплоймент проектаMoscowDjango
 
Django South. Миграция баз данных.
Django South. Миграция баз данных.  Django South. Миграция баз данных.
Django South. Миграция баз данных. MoscowDjango
 
Журнальная вёрстка в Django
Журнальная вёрстка в DjangoЖурнальная вёрстка в Django
Журнальная вёрстка в DjangoMoscowDjango
 

Plus de MoscowDjango (9)

Тестирование и Django
Тестирование и DjangoТестирование и Django
Тестирование и Django
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать код
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Django на Android
Django на AndroidDjango на Android
Django на Android
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на Django
 
Class Based Generic Views в Django
Class Based Generic Views в DjangoClass Based Generic Views в Django
Class Based Generic Views в Django
 
Простой и удобный деплоймент проекта
Простой и удобный деплоймент проектаПростой и удобный деплоймент проекта
Простой и удобный деплоймент проекта
 
Django South. Миграция баз данных.
Django South. Миграция баз данных.  Django South. Миграция баз данных.
Django South. Миграция баз данных.
 
Журнальная вёрстка в Django
Журнальная вёрстка в DjangoЖурнальная вёрстка в Django
Журнальная вёрстка в Django
 

Работа со статикой в Django

  • 2. Проблемы • количество файлов статики на странице • размеры файлов • Less, Stylus => CSS • Co3eeScript, ClojureScript => JavaScript • компиляция шаблонов на клиенте
  • 3. К чему они приводят • появляется огромный script.js (style.css), в котором много тысяч строк • комментариев нет • код плохо читается • табуляция вместо пробелов (экономия байтов же!) • Less, Co3eeScript и т.п. не используются
  • 4. Что нужно от инструмента • объединение файлов статики в один • минификация и gzip-сжатие кода • поддержка Less, Stylus, Co3eeScript и т.д. • прозрачная и незаметная работа • удобная отладка
  • 5. Что уже есть • django_compressor • webassets • другие библиотеки, похожие на webassets • django-gears (порт Sprockets)
  • 6. django_compressor {% load compress %} {% compress js %} <script src="/static/js/models.js"></script> <script src="/static/js/collections.js"></script> <script src="/static/js/views.js"></script> <script src="/static/js/router.js"></script> <script src="/static/js/application.js"></script> {% endcompress %} <!-- на выходе будет нечто подобное: --> <script src="/static/CACHE/js/34fe95a4b234.js"></ script>
  • 7. webassets register('application', Bundle( 'js/models.js', 'js/collections.js', 'js/views.js', 'js/router.js', 'js/application.js', output='js/gen/application.js', )) # в шаблоне: {% load assets %} {% assets "application" %} <script src="{{ ASSET_URL }}"></script> {% endassets %}
  • 8. django-gears /* * application.js * * =require models * =require collections * =require_directory templates * =require views * =require router */ $(function() { new Router(); Backbone.history.start({pushState: true}); });
  • 9. django-gears <script src="{{ STATIC_URL }}js/application.js"></script>
  • 10. django-gears: отладка {% load gears %} {% js_asset_tag "js/application.js" %}
  • 11. django-gears: отладка <!-- DEBUG = True --> <script src="/static/js/models.js?body=1"></script> <script src="/static/js/collections.js?body=1"></script> <script src="/static/js/views.js?body=1"></script> <script src="/static/js/router.js?body=1"></script> <script src="/static/js/application.js?body=1"></script> <!-- DEBUG = False --> <script src="/static/js/application.js"></script>
  • 12. django-gears • http://git.io/gears • обертка над библиотекой Gears • еще есть Flask-Gears и gears-cli
  • 13. Зависимости • require • require_self • require_directory • require_tree (скоро) • depend_on (скоро)
  • 14. Компиляция в CSS и JS • Из коробки поддерживаются: • Less • Stylus • Co3eeScript • Handlebars • Цепочка расширений определяет процедуру компиляции: • application.js.co3ee • style.css.styl
  • 15. Минификация • slimit (Python) • cssmin (Python) • UglifyJS (node.js) • clean-css (node.js)
  • 18. Спасибо за внимание Вопросы? • @yumatov • http://trilandev.com • https://github.com/yumike • https://github.com/trilan