我的所有JavaScript都是通过Django的编译器运行的,允许我以下列方式注入HTML字符串Underscore模板:
CREATE TABLE dbo.MyMassiveTable
(
pk INT IDENTITY CONSTRAINT PK_MyMassiveTable PRIMARY KEY,
Blob1 NVARCHAR(MAX)
)
INSERT INTO dbo.MyMassiveTable
VALUES (REPLICATE(CAST(N'X' AS VARCHAR(MAX)), 3848564 / 2));
此代码通过var htmlStr = '{% filter convert_js_template %}{% include "my_file.html" %}{% endfilter %}'
过滤器运行包含的HTML文件的输出,该过滤器只删除换行符并转义单引号,以便最终的JS字符串有效。然而,为了使其更具可读性,我希望能够简单地编写如下内容:
convert_js_template
如何创建一个var htmlStr = '{% convert_js_template "my_file.html" %}'
函数来完成此任务?我的感觉是它需要通过以下方式开始:
我尝试了以下内容:
convert_js_template
我最初收到错误@register.filter('convert_js_template')
def convert_js_template(path):
value = include(path)
return value.replace('\n', '').replace('\r', '').replace("'", "\\'")
,然后我将NameError: global name 'include' is not defined
添加到文件中,现在收到了其他错误:from django.conf.urls import include
这就是我被困的地方:)。
答案 0 :(得分:0)
我的解决方案不涉及自定义“包含”功能。相反,它手动加载并呈现所需的模板文件:
from django.template import Library, loader, Context
...
register = Library()
...
@register.filter('js_template')
def js_template(template_path):
tpl = loader.get_template(template_path)
return tpl.render(Context({})).replace('\n', '').replace('\r', '').replace("'", "\\'")
js_template.is_safe = True
请注意,template_path
应该与您为Django设置目录以查找模板的目录相关。
用法:
var htmlString = '{{ "path/to/my_template.html" | js_template }}';