我有相当数量的自定义模板标签,可执行各种功能,包括:
所有这些功能都位于一个文件中:app/templatetags/custom_tags.py
。当我想在模板中使用其中一个标记时,我使用{% load custom_tags %}
导入所有标记。
但是,在任何给定的模板中实际只使用了一小部分可用标签。换句话说,所有这些功能都被“加载”到模板中,但只有少数几个在特定的Web请求中调用。
{% load custom_tags %}
不会产生任何额外开销?如果此问题中存在错误的假设或前提,我道歉。我希望能够更好地理解导入python代码的含义,特别是在Django环境中。
答案 0 :(得分:3)
load
标记定义为here,实际上是加载here和here。两个地方都拨打get_library
,定义here。根据那里的文档字符串yes,它将模板标记/过滤器库缓存在字典初始化here的同一进程中。
模板标记are now being loaded even earlier的模块,在实例化解析器时,直接存储库on the parser。加载代码会调出find_library
here和here,只有gets the already-loaded tag directly from the parser。
正如@spectras指出的那样,无论Django版本如何,标签的加载行为严格来说都是副作用,标签返回(<=1.8 / 1.9)一个无操作节点(<=1.8 / 1.9),它没有任何内容 - 因此,就此而言,并不是真正的性能考虑因素。