#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, который делает именно это