使用 Django 的模板引擎而不使用 Django 的其余部分

Posted

技术标签:

【中文标题】使用 Django 的模板引擎而不使用 Django 的其余部分【英文标题】:Using Django's templating engine without the rest of Django 【发布时间】:2012-02-18 15:27:00 【问题描述】:

我正在构建一个应用程序,它使用 Django 模板引擎/语言来“编译”一些 html。但是,该应用程序不能在 Django 上运行,并且没有所有的配置和东西。 当我尝试使用它时,我收到以下错误:

Traceback (most recent call last):
  File "Send.py", line 33, in <module>
    template = loader.get_template("email.html")
  File "/Library/Python/2.7/site-packages/django/template/loader.py", line 157, in get_template
    template, origin = find_template(template_name)
  File "/Library/Python/2.7/site-packages/django/template/loader.py", line 138, in find_template
    raise TemplateDoesNotExist(name)
django.template.base.TemplateDoesNotExist: email.html

我使用的代码如下:

from django.template import loader, Context
from django.conf import settings

template = loader.get_template("email.html")
rendered = template.render(data)

模板与 Python 文件位于同一目录中。

【问题讨论】:

可能duplicate 这是一个适用于 Django >= 1.8 ***.com/a/34494931/817277 的答案 【参考方案1】:

我建议使用 Jinja2 而不是 Django 模板作为独立解决方案。

【讨论】:

我同意这一点。如果您已经熟悉 Django 模板,您就会知道如何使用 Jinja2。它们几乎相同,但 Jinja 更好恕我直言。 Jinja2 python3 支持仍处于试验阶段【参考方案2】:

你试过用这个吗?

settings.configure(TEMPLATE_DIRS=('.',))

由于模板与python代码在同一目录下,这应该足以让加载器找到模板。

【讨论】:

【参考方案3】:

为了让加载器找到你的模板;您需要在settings.py 中的TEMPLATE_DIRS 元组中拥有模板所在的目录。默认情况下,django 将搜索templates 目录在应用程序中,所以如果您没有注册应用程序; django 找不到模板。

如果您使用“django like”模板引擎,jinja 非常接近 django 的语法并且完全独立,您不会遇到现在所面临的意外问题。

【讨论】:

以上是关于使用 Django 的模板引擎而不使用 Django 的其余部分的主要内容,如果未能解决你的问题,请参考以下文章

多个 Django 模板加载器

使用 Django 模板和标签而不使用 Django 的其余部分

Django as ORM - 异步执行更新查询而不阻塞

django模板中的乘法而不使用手动创建的模板标签

Django

使用带有自定义引导样式的 Django 模板放置 <select> 字段