gpt4 book ai didi

django - 在 Django 之外加载和渲染模板

转载 作者:行者123 更新时间:2023-12-01 14:00:49 25 4
gpt4 key购买 nike

使用 this guide as my reference ,我为 Django 模板编写了一个集合标签解析器,它将应用于 TWIG 的集合语法,即:

{% set someVar %} variableAssignment {% endset %}

我只将 Django 用于它的模板系统,到目前为止,我已经能够通过正确的导入来正确显示我的模板。这是我目前的代码:

from django.template import Context, Template, Library, Node, TemplateSyntaxError, Variable, VariableDoesNotExist, resolve_variable
from django.template.loader import *
from django.conf import settings
settings.configure(TEMPLATE_DIRS="/my/templates")
register = Library()
class SetValueNode(Node):
def __init__(self, variable, nodelist):
self.variable = variable
self.nodelist = nodelist
def render(self, context):
context[self.variable] = self.nodelist.render(context)
return ""

@register.tag(name="set")
def set_tag(parser, token):
print "set_tag called: parser",parser," token",token
nodelist = parser.parse(("endset",))
parser.delete_first_token()
return SetValueNode(arg, nodelist)

def sendServiceEmail(username, first, last, service, service_tuple):
TEMPLATES_DIR = "/my/templates/"
emailStr = "myemail.html.twig"
print "Opening file :"+TEMPLATES_DIR+emailStr
t = Template(fp.read())
fp.close()
c = Context({
/*Add context from parameters*/
})
msg = t.render(c)
print msg

但我得到的错误是:

django.template.base.TemplateSyntaxError: 'set_tag' is not a valid tag library: Template library set_tag not found, tried django.templatetags.set_tag

经过一番研究和思考后,django 正在查找的库似乎是“标准”库。我认为我需要告诉某人(django 设置、模板或 .render)我希望他们使用“库”并检查库以查看模板标签是否已注册。有没有办法在不创建 Django 应用程序的情况下将此信息传递给 Django?

最佳答案

以下信息适用于 Django 1.4您有三个选择。

应用解决方案

您需要创建一个具有定义结构的应用程序,但它不必是一个完整的 django 应用程序。假设您将其命名为 myapp

这是必需的文件结构

myapp/
__init__.py
templatetags/
__init__.py
your_library.py

在您的主脚本中执行以下操作

from django.conf import settings
from django.template.loader import get_template

# You need to configure Django a bit
settings.configure(
# Access to template tags
INSTALLED_APPS=('myapp', ),
# Access to templates
TEMPLATE_DIRS=(TEMPLATES_DIR, ),
)

template = get_template("myemail.html.twig")
# Prepare context ....
return t.render(context)

模块解决方案

如果你不愿意使用这么大的结构,应该可以只创建一个带有模板标签的模块并将其传递给 django.template.base.add_to_builtins 方法,参见 https://github.com/django/django/blob/master/django/template/base.py#L1349

完全不同的东西

或者您可能会考虑改用 jinja2 http://jinja.pocoo.org/docs/,但我不知道标签在那里工作。

关于django - 在 Django 之外加载和渲染模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10018475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com