Django 条件模板标签库加载器

1 投票
2 回答
1231 浏览
提问于 2025-04-17 04:41

我正在开发一个Django应用,这个应用提供一些模板,这些模板会根据其他应用是否可用来决定是否启用某些功能。

如果某个模板标签库不可用,使用标准的{% load %}标签是无法加载它的。这样做会导致出现TemplateSyntaxError错误。

有没有人想出解决这个问题的方法?也就是说,能不能有一个条件加载标签库的功能,这样我就可以像这样写:

{% load_if_available app_tags %}

还有

{% if_loaded app_tags %}{% endif %}

2 个回答

1

你可以写一个自定义模板标签并注册它。你可以参考一下Django的load模板标签。

问题是,你还需要把所有“加载的”模板标签放在条件判断里。解决这个问题的一种方法是注册一些无效的函数,这些函数什么都不做(可能只是记录一些日志,但不会报错),这样代码就能正常运行。更好的办法是创建一个额外的if_module_loaded“模块”,然后跳过里面的代码。这要看你具体的使用场景。

6

我创建了一个新的Django应用,正好实现了我想要的功能。这个应用叫做django-friendly-tag-loader,可以在PyPi上找到,链接是 http://pypi.python.org/pypi/django-friendly-tag-loader/,你也可以在这里查看和修改代码 https://github.com/ataylor32/django-friendly-tag-loader

这个应用提供了三个模板标签:{% friendly_load %}{% if_has_tag %}{% ifnot_has_tag %}

friendly_load 和Django自带的加载器几乎一样,但它会忽略掉InvalidTemplateLibrary这个错误,继续加载下一个库。

if_has_tagifnot_has_tag用来检查模板解析器是否有某个特定的标签,然后根据检查结果来决定是否渲染模板的一部分,或者直接忽略它。

撰写回答