2011-12-21 19 views
3

我是python for web应用程序的新手,并且正在为我的第一次尝试使用django。由于应用程序应该动态创建一些latex文件,我认为最优雅的方式是将latex文件作为Web请求返回,并使用django模板引擎动态创建内容。但是,模板语法也由乳胶中的特殊字符({,%和})组成。所以在这种特殊情况下,我想改变django模板系统的语法。用django回应乳胶代码到web请求

我的问题是:

  1. 你认为这是做乳胶文件创建的推荐的方法?或者我应该使用python打开模板文件,并为所有变量创建正则表达式等等。 (我会真的更喜欢django模板的方式!)
  2. 我该如何改变在Django模板中替换变量和函数的方式?例如。 {{x}}至< < x >>或类似的东西。

回答

6

AFAIK,Django模板语言不支持自定义语法。幸运的是,还有另一种名为Jinja2的可插入模板系统。

看到这个blog post为别人的LaTeX和Jinja2的经验。

Official Jinja2 docs关于这个问题。

+0

+1因为你让我看看Jinja2 :)我肯定会尝试有一天.. – redShadow 2011-12-21 23:12:48

+0

非常整洁!特别是因为我不必更改现有的模板! – janoliver 2011-12-22 08:20:33

2

您可以使用Jinja2的,或者你可以做到这一点通过使用默认的模板系统太:

看着为django/template/__init__.py代码,围绕行78(Django的1.2)我看到这一点:

75 # template syntax constants 
76 FILTER_SEPARATOR = '|' 
77 FILTER_ARGUMENT_SEPARATOR = ':' 
78 VARIABLE_ATTRIBUTE_SEPARATOR = '.' 
79 BLOCK_TAG_START = '{%' 
80 BLOCK_TAG_END = '%}' 
81 VARIABLE_TAG_START = '{{' 
82 VARIABLE_TAG_END = '}}' 
83 COMMENT_TAG_START = '{#' 
84 COMMENT_TAG_END = '#}' 
85 SINGLE_BRACE_START = '{' 
86 SINGLE_BRACE_END = '}' 

因此,有可能设法用一些自定义的常量代替常量(仅用于有限的用法)。

不要直接monkeypatch,因为改变该模块中的常量会阻止默认视图被正确渲染。

+0

好的,就我从代码中看到的那样,我认为你必须将'django.template'包的整个代码复制到你的应用程序中的某个地方,将它重命名为'template2'之类的东西,并随着你改变模板语法常量喜欢;然后利用'template2'中的函数为乳胶文件渲染只.. ..或者只使用Jinja :) – redShadow 2011-12-21 23:10:59

+0

我决定去Jinja。不过谢谢! – janoliver 2011-12-22 09:03:01