Я считаю, что самым простым способом было бы просто разделить код на несколько шаблонов (возможно, включающих), чтобы у вас не было {% load django_tables %}
и {% load table_tags %}
(из django-datatable) в одном файле. Это не потребует ничего особенного и будет работать с любой версией Django.
Что касается переименования, я не думаю, что есть готовый встроенный способ. Существует синтаксис для импорта только определенных тегов/фильтров ({% load render_table from table_tags %}
), но нет способа их переименовать.
Один из способов - реализовать собственный загрузчик. Вероятно, вам следует взглянуть на django.template.defaulttags.load
. исходный код и скопируйте его, реализуя свой собственный load_ex
с пользовательским синтаксисом {% load_ex render_table as render_table_dt from table_tags %}
. По сути, все, что вам нужно сделать, это добавить расширенный анализ синтаксиса и переименовать lib.tags
ключей (это просто словарь, сопоставление имени тега с функцией) в соответствии с предоставленными правилами.
Или — более грязный подход — подключиться к django.template.defaulttags.find_library
. Там у вас есть экземпляр библиотеки name
и parser
, так что что-то вроде этого:
# Somewhere in your project's init code...
if not hasattr(defaulttags.find_library, "_is_hacked"):
real_find_library = defaulttags.find_library
def find_library(parser, name):
lib = real_find_library(parser, name)
if name == "django_tables2" and "render_table" in lib.tags:
lib.tags["render_table2"] = lib.tags["render_table"]
del lib.tags["render_table"]
return lib
find_library._is_hacked = True
defaulttags.find_library = find_library
Этого должно быть достаточно, чтобы переименовать тег. Я вообще не проверял код (извините, если есть опечатки или какие-то ошибки), но вы должны получить представление.
person
drdaeman
schedule
06.05.2017