Django条件模板标签库加载器

时间:2011-10-20 11:19:47

标签: python django django-templates

我正在开发一个Django应用程序,如果某些其他应用程序可用,它会提供带有可选功能的模板。

使用标准{% load %} Django标记加载不可用的模板标记库是不可能的。尝试这样做会产生TemplateSyntaxError

有没有人想出解决这个问题的方法? I.E.一个条件标签lib loader所以我可以做这样的事情:

{% load_if_available app_tags %}

{% if_loaded app_tags %}{% endif %}

2 个答案:

答案 0 :(得分:3)

我创建了一个新的Django应用程序来完成我想要的工作。它被称为django-friendly-tag-loader,可以从PyPi http://pypi.python.org/pypi/django-friendly-tag-loader/获得并且可以破解@ https://github.com/ataylor32/django-friendly-tag-loader

它提供了3个模板标记:{% friendly_load %}{% if_has_tag %}{% ifnot_has_tag %}

friendly_load与Django的内置加载器几乎相同,但只是吞下InvalidTemplateLibrary并继续加载下一个库。

if_has_tag / ifnot_has_tag检查模板解析器是否具有某个给定标记,然后呈现或忽略模板的一些内容。

答案 1 :(得分:1)

您可以撰写custom templatetag并注册。 您可以从django load templatetag获取灵感。

问题是,你是否还必须在ifs中包装所有“已加载”的模板标签。一种方法是注册无效的虚拟函数(可能只是记录一些东西但是无声地失败),这样代码才能正常工作,甚至更好,创建一个额外的if_module_loaded“模块”并跳过里面的代码。取决于您的用例。