loader.get_template_from_string()和创建模板有什么区别?

时间:2012-11-14 16:41:24

标签: django django-templates

我一直在努力为用户存储他们自己的模板,我知道我将不得不动态创建模板。例如:

>>> from django.template import Template
>>> Template("Testing {{test}}")
<django.template.base.Template object at 0x10c58f990>

但是,当我询问加载模板字符串时,建议我使用get_template_from_string

>>> from django.template import loader
>>> loader.get_template_from_string("Testing {{test}}")
<django.template.base.Template object at 0x10c8b5450>

这两种方法有什么区别?一种方式是更加pythonic,还是更喜欢另一种?

2 个答案:

答案 0 :(得分:3)

Django documentation for the templating code使用您描述的第一种方法描述:使用Template()

它没有提到get_template_from_string,也没有提到文档中的任何其他地方。

因此,我会非常依赖第一种方法的使用,因为另一种方法可能在将来更有可能发生变化,因为它是一种无证的功能。

答案 1 :(得分:2)

在当前版本的Django中,get_template_from_string只是以与你相同的方式实例化一个新模板。

def get_template_from_string(source, origin=None, name=None):
"""
Returns a compiled Template object for the given template code,
handling template inheritance recursively.
"""
    return Template(source, origin, name)

源代码在这里:https://github.com/django/django/blob/master/django/template/loader.py