Пользовательский язык шаблонов для Django

#django #django-templates #haml

#django #django-шаблоны #haml

Вопрос:

Я хочу использовать другой язык шаблонов с Django. На самом деле это HamlPy, язык, основанный на HAML, который напрямую переводится на шаблоны Django. Таким образом, я могу сделать что-то вроде

 from hamlpy import Compiler
compiler = Compiler()
django_template_string = compiler.process(hamlpy_template_string)
  

Пожалуйста, обратите внимание, что для этого не требуется никакого контекста — это просто предварительная обработка текста шаблона. Затем полученный текст можно использовать в качестве шаблона Django обычным способом.

Итак, я хочу обернуть этот код внутри некоторого кода deus-ex-machina, который изящно вмешается в загрузку шаблона и предварительно обработает его, прежде чем Django попытается отобразить или даже проанализировать его.

Из того, что я вижу, если бы я мог перегрузить Parser класс и сделать

 def parse(str):
    str = preprocess(str)
    super().parse(str)
  

это было бы наиболее прозрачным решением.

Я знаю о пользовательских тегах и фильтрах. Я понимаю, что моя задача может быть решена с помощью «глобального» тега `preprocess_hamlpy’.

Но мне интересно, можно ли это сделать по-другому.

Ответ №1:

Напишите загрузчик шаблонов и поместите его в свои настройки.

Комментарии:

1. да, это имеет смысл, но ограничивает пользователей одним типом загрузки шаблона (или требует нескольких идентичных копий). Это рекомендуемый способ?

2. Я имею в виду, я могу наследовать от FSLoader и предварительно обработать файл после его нахождения, но тогда мне нужно будет дублировать его для AppDirsLoader

3. Вы могли бы написать загрузчик, который инкапсулирует оба.

4. ах, имеет смысл. Я полагаю, я даже могу самостоятельно проанализировать TEMPLATE_LOADERS и запустить все вышеперечисленные HamlpyLoader, пока они не найдут шаблон. Спасибо

5. на самом деле я нашел djaml, который делает именно это