Django Jinja2 Markdown
Когда в Django запилили поддержку шаблонов на Jinja2, это была настоящая революция. Потому что встроенный шаблонизатор джанги — эталонный кусок говна. Основная претензия — оно не поддерживает функции, поэтому всё, что сложнее тупого вывода переменной, в нём приходилось делать через жопу. Точнее, через context processors.
Проблема перехода на jinja2 в том, что практически все пакеты для джанги написаны исключительно под родной шаблонизатор.
Допустим, вы подключили к своему любимому проекту на django поддержку jinja2, переделали шаблоны по-нормальному, кайфанули, а потом вам надо присобачить, ну, допустим, маркдаун. И вы в ступоре, потому что django-markdownx, например, с джинжей и не работает.
Итак, как добавить рендеринг markdown в шаблоны jinja2?
Как сообщает официальная документация, подключение jinja2 выглядит вот так.
В settings.py
TEMPLATES = [
{
«BACKEND»: 'django.template.backends.jinja2.Jinja2',
«DIRS»: [BASE_DIR / 'jinja2'],
«APP_DIRS»: True,
'OPTIONS': {
'environment': 'myproject.jinja2.environment',
},
},
И в myproject/jinja2.py
from django.templatetags.static import static
from django.urls import reverse
from jinja2 import Environment
def environment (**options):
env = Environment (**options)
env.globals.update (
{
«static»: static,
«url»: reverse,
}
)
return env
Таким образом, вы передаёте в конекст функции static
и url
Ну давайте туда же добавим маркдаун.
Для начала, конечно, его надо поставить — pip install markdown
. В requirements.txt
добавить — ну, это и дураку понятно. А потом всё просто — в myproject/jinja2.py
добавляем следующее
…
from markdown import markdown
…
env.globals.update (
{
…тут ваши функции, которые тянете в контекст
}
)
…а тут добавляем новый фильтр для jinja2
env.filters.update (
{
«markdown»: lambda text, *args, **kwargs: markdown (text, *args, **kwargs),
}
И всё.
Теперь в шаблонах можете использовать следующую конструкцию — она преобразует маркдаун в html
{{ post.text | markdown | safe }}
А django-markdownx можете нахуй выкинуть.
Да, вы, конечно, могли это спросить у нейросетки, но код, который она вам даст, будет не таким элегантным — инфа 100%.