我正在开发一个Django应用程序,如果某些其他应用程序可用,它会提供带有可选功能的模板。
使用标准{% load %}
Django标记加载不可用的模板标记库是不可能的。尝试这样做会产生TemplateSyntaxError
。
有没有人想出解决这个问题的方法? I.E.一个条件标签lib loader所以我可以做这样的事情:
{% load_if_available app_tags %}
和
{% if_loaded app_tags %}{% endif %}
答案 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“模块”并跳过里面的代码。取决于您的用例。