Можно ли параметризовать библиотеку тегов шаблона в каталоге шаблонов?

Допустим, я пишу библиотеку тегов шаблонов форм для Django, но хочу иметь возможность отображать формы как на Bootstrap, так и на UIKit.

Код Python будет идентичен, за исключением ссылки на шаблон. Упрощенный

@register.inclusion_tag('myforms/bootstrap/formrow.html')
def form_row(fieldname, labelpos, labelsize, widgetsize):
    return {...}

vs.

@register.inclusion_tag('myforms/uikit/formrow.html')
def form_row(fieldname, labelpos, labelsize, widgetsize):
    return {...}

Я хотел бы предотвратить дублирование кода python, но функция @register.inclusion_tag(..) выполняется очень рано в жизненном цикле Django, поэтому я не уверен, возможно ли это, или как это сделать...

В соответствии с документацией можно зарегистрировать тег включения, используя django.template.Template экземпляр, что означает, что вы можете сделать следующее,

# Pseudo code
from django.template.loader import get_template

bootstrap = get_template('myforms/bootstrap/formrow.html')
uikit = get_template('myforms/uikit/formrow.html')

register.inclusion_tag(bootstrap)(re_usable_form_row_function)
register.inclusion_tag(uikit)(re_usable_form_row_function)
Вернуться на верх