Переопределить существующие пользовательские теги шаблона приложения Django [дубликат]Python

Программы на Python
Ответить
Anonymous
 Переопределить существующие пользовательские теги шаблона приложения Django [дубликат]

Сообщение Anonymous »

У меня есть приложение, которое использует Weblate для управления переводами. Я использую образ Docker weblate/weblate с моими собственными настройками, созданными в виде отдельного пакета Python, расширяющего этот образ и построенного поверх него. Проблема в том, что в HTML-шаблонах Weblate есть тег шаблона icon, который должен загружать значки SVG из STATIC_ROOT или CACHE_DIR, но мое приложение работает в бессерверной настройке. и поэтому выгружает все статические ресурсы в корзину S3. Для большинства ресурсов это работает нормально, но из-за логики тегов шаблона значки не загружаются, и я получаю эти сообщения об ошибках -

Код: Выделить всё

weblate-1   | gunicorn stderr | [2025-01-21 12:41:08,913: WARNING/1540] Could not load icon: FileNotFoundError: [Errno 2] No such file or directory: '/app/cache/static/icons/weblate.svg'
weblate-1   | gunicorn stderr | [2025-01-21 12:41:08,918: WARNING/1540] Could not load icon: FileNotFoundError: [Errno 2] No such file or directory: '/app/cache/static/icons/wrench.svg'
weblate-1   | gunicorn stderr | [2025-01-21 12:41:08,919: WARNING/1540] Could not load icon: FileNotFoundError: [Errno 2] No such file or directory: '/app/cache/static/icons/plus.svg'
weblate-1   | gunicorn stderr | [2025-01-21 12:41:08,923: WARNING/1540] Could not load icon: FileNotFoundError: [Errno 2] No such file or directory: '/app/cache/static/icons/dots.svg'
Я написал свой собственный тег шаблона, который поместил в свой собственный модуль weblate_customization/templatetags/icon.py, но он не переопределяет логику загрузки значков Weblate по умолчанию, и я не могу получить доступ к шаблонам по умолчанию в моем коде, если я не исправлю обезьяну. Код тега шаблона значков по умолчанию существует в приложении weblate.utils, которое включено в базовое изображение и загружает все функциональные возможности утилиты, необходимые приложению для работы, поэтому я не могу его просто выбросить. Есть ли способ заставить Django загружать мою собственную версию этого тега шаблона вместо той, которая предоставлена ​​weblate?
ИЗМЕНИТЬ
Логика тега шаблона по умолчанию выглядит следующим образом:

Код: Выделить всё

weblate/weblate/utils/templatetags/icon.py

Код: Выделить всё

@register.simple_tag()
def icon(name):
"""
Inlines SVG icon.

Inlining is necessary to be able to apply CSS styles on the path.
"""
if not name:
msg = "Empty icon name"
raise ValueError(msg)

if name not in CACHE:
if name.startswith("state/"):
icon_file = os.path.join(settings.STATIC_ROOT, name)
else:
icon_file = os.path.join(settings.STATIC_ROOT, "icons", name)
try:
with open(icon_file) as handle:
CACHE[name] = mark_safe(handle.read())  # noqa: S308
except OSError:
report_error("Could not load icon")
return ""

return CACHE[name]
А логика, которую я пытаюсь реализовать, следующая:

Код: Выделить всё

weblate_customization/templatetags/icon.py

Код: Выделить всё

@register.simple_tag()
def icon(name: str) -> str:
"""
Inlines SVG icon.

Inlining is necessary to be able to apply CSS styles on the path.
"""
if not name:
msg = "Empty icon name"
raise ValueError(msg)

if name not in CACHE:
if name.startswith("state/"):
icon_url = os.path.join(settings.STATIC_URL, name)
else:
icon_url = os.path.join(settings.STATIC_URL, "icons", name)

try:
icon_file = request.urlopen(icon_url)
except OSError:
report_error("Could not load icon")
return ""
else:
CACHE[name] = ""
for line in icon_file.readlines():
CACHE[name] += line

return mark_safe(CACHE[name])
Как мне заставить Django использовать указанный мной простой тег вместо тега по умолчанию?
Я не могу переименовать его во что-то вроде «new_icon» и перезаписать шаблоны, поскольку шаблоны берутся из базового образа Docker, а также из самого модуля weblate.utils, где теги шаблона определяются и регистрируются.

Подробнее здесь: https://stackoverflow.com/questions/793 ... plate-tags
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»