Веб-версияОткрыть в Telegram

ПостКогда-то давно, когда я только изучал Django, мне хотелось избавиться от бойлерплейта в темплейтах и вынести некоторые ч…

27 февраля 2023
К
Коробка с питоном
Когда-то давно, когда я только изучал Django, мне хотелось избавиться от бойлерплейта в темплейтах и вынести некоторые части шаблонов (например кнопки) в какие-то отдельные сущности которые можно переиспользовать - например в виде компонентов. К счастью, в Django есть решение для этого и оно называется template tags. Но у него есть несколько проблем: 1) Необходимо пробрасывать руками js и css зависимости для конкретного тега там, где он используется. 2) Теги плохо кастомизируются, например нет возможности изменить поведение тега, обязательно нужно его переписывать. Решением этих вопросов занимается пакет с названием django-components. Он предоставляет возможность делать простые, но в то же время мощные переиспользуемые компоненты. А как он справляется с проблемами выше? 1) При объявлении компонента будут грузиться только те js и css, которые указаны в классе компонента. Класс компонента выглядит как-то так: from django_components import component @component.register("calendar") class Calendar(component.Component): template_name = "calendar/calendar.html" def get_context_data(self, date): return { "date": date, } class Media: css = "calendar/calendar.css" js = "calendar/calendar.js" Сам js/css рендерится только там, где указаны теги component_js_dependencies и component_css_dependencies. 2) Для изменения поведения компонента можно использовать слоты - это что-то вроде django-блоков внутри компонента. Например, мы можем сделать блок body внутри компонента и изменять его вид тогда, когда нам нужно: <div class="calendar-component"> <div class="header"> {% slot "header" %}Заголовок календаря{% endslot %} </div> <div class="body"> {% slot "body" %}Сегодня <span>{{ date }}</span>{% endslot %} </div> </div> А теперь импортируем компонент и меняем его body: {% component_block "calendar" date="2020-06-06" %} {% slot "body" %}А сегодня точно <span>{{ date }}</span>?{% endslot %} {% endcomponent_block %} Github | PyPi #django #библиотека
3 · 476 ·

Рядом в ленте

ККоробка с питономРазговоры шли давно, но 9ого числа представили PEP 703, который предлагает сделать GIL опциональным. Прототип опубликован в репозитории nogil. В качестве основаККоробка с питономВ Python 3.12 планируют переделать f-строки в рамках PEP 701 – Syntactic formalization of f-strings. Дело в том, что f-строки в язык занесли в версии 3.6, когда
это сообщение
ККоробка с питономЕсли вы хоть раз задумывались о том, можно ли фичи FastAPI (автогенерация OpenAPI, интеграция с Pydantic, поддержка асинхронности и т.д.) добавить в Django, то ККоробка с питономНемного про роутинг в FastAPI Если вы пользовались FastAPI, то наверняка знаете, что роут можно сделать либо асинхронным, либо синхронным. Так когда какой надо
ККоробка с питономКоробка с питоном@boxwithpython · канал · Технологии
488подписчиков154постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем