我想在我的(Python)代码中使用Django模板引擎,但我不是在构建基于Django的网站.如何在没有settings.py文件(和其他人)的情况下使用它并且必须设置DJANGO_SETTINGS_MODULE环境变量?
如果我运行以下代码:
>>> import django.template >>> from django.template import Template, Context >>> t = Template('My name is {{ my_name }}.')
我明白了:
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
Daryl Spitze.. 132
解决方案很简单.它实际上有很好的记录,但不容易找到.(我不得不四处寻找 - 当我尝试一些不同的谷歌搜索时,它没有出现.)
以下代码有效:
>>> from django.template import Template, Context >>> from django.conf import settings >>> settings.configure() >>> t = Template('My name is {{ my_name }}.') >>> c = Context({'my_name': 'Daryl Spitzer'}) >>> t.render(c) u'My name is Daryl Spitzer.'
有关您可能要定义的一些设置的描述(作为配置的关键字参数),请参阅Django文档(上面链接).
解决方案很简单.它实际上有很好的记录,但不容易找到.(我不得不四处寻找 - 当我尝试一些不同的谷歌搜索时,它没有出现.)
以下代码有效:
>>> from django.template import Template, Context >>> from django.conf import settings >>> settings.configure() >>> t = Template('My name is {{ my_name }}.') >>> c = Context({'my_name': 'Daryl Spitzer'}) >>> t.render(c) u'My name is Daryl Spitzer.'
有关您可能要定义的一些设置的描述(作为配置的关键字参数),请参阅Django文档(上面链接).
Jinja2 语法与Django几乎完全相同,只有很少的差异,你会得到一个更强大的模板引擎,它也可以将你的模板编译成字节码(快!).
我用它来模板化,包括Django本身,它非常好.如果缺少某些功能,您也可以轻松编写扩展名.
以下是代码生成的一些演示:
>>> import jinja2 >>> print jinja2.Environment().compile('{% for row in data %}{{ row.name | upper }}{% endfor %}', raw=True) from __future__ import division from jinja2.runtime import LoopContext, Context, TemplateReference, Macro, Markup, TemplateRuntimeError, missing, concat, escape, markup_join, unicode_join name = None def root(context, environment=environment): l_data = context.resolve('data') t_1 = environment.filters['upper'] if 0: yield None for l_row in l_data: if 0: yield None yield unicode(t_1(environment.getattr(l_row, 'name'))) blocks = {} debug_info = '1=9'
您想使用Django模板的任何特殊原因?无论神社和元史是,在我看来,优越.
如果你真的想,请参阅Django文档settings.py
.特别是"使用没有设置的设置DJANGO_SETTINGS_MODULE
"部分.使用这样的东西:
from django.conf import settings settings.configure (FOO='bar') # Your settings go here
我也推荐jinja2.有一篇很好的关于django
vs.的文章jinja2
,提供了一些关于为什么要优先考虑后者的详细信息.