我希望通过django视图使用latex创建pdf。我创建了视图并设置了latex模板,除了一个问题,它都可以正常工作。当我在latex模板中放置变量时,必须在花括号周围使用空格,如下所示:
\somevalue{ {{variable}} }
否则Django将不会检查它是否作为变量。LaTeX语法检查器已经告诉我“周围有意图之外的空格}?!”。我可以通过视图将变量传递到模板中并创建pdf,但插入文本周围会有空格。有人有解决这个问题的想法吗?
我希望通过django视图使用latex创建pdf。我创建了视图并设置了latex模板,除了一个问题,它都可以正常工作。当我在latex模板中放置变量时,必须在花括号周围使用空格,如下所示:
\somevalue{ {{variable}} }
根据一些谷歌研究,我建议将模板引擎切换到Jinja,它受Django支持并具有可配置的语法。 请注意,我尚未完全测试此方法。
以下是您的latex模板示例:
\somevalue{((variable))}
最重要的部分是设置variable_start_string
和variable_end_string
选项:
>>> import jinja2
>>> env = jinja2.Environment(variable_start_string='((', variable_end_string='))')
>>> t = env.from_string("\somevalue{((variable))}")
>>> t.render(name='Attention!')
'\\somevalue{Attention!}'
Jinja的切换文档概述了(少量)语法差异。来自常见问题解答:
Jinja2的默认语法在许多方面与Django语法相似。但是,这种相似性并不意味着您可以在Jinja2中不经修改地使用Django模板。例如,过滤器参数使用函数调用语法而不是冒号来分隔过滤器名称和参数。此外,Jinja中的扩展接口与Django的基本不同,这意味着您的自定义标签将不再起作用。
Django 1.9和1.8以及其他版本可能已内置对Jinja的支持。
我没有找到配置Django中Jinja语法的示例,目前无法测试,但我认为您需要根据需要更改TEMPLATES['OPTIONS']
字典:
block_start_string='(#',
block_end_string='#)',
variable_start_string='((',
variable_end_string='))',
comment_start_string='((#',
comment_end_string='#))',
template = select_template(self.get_template_names())
latex_content = template.render(context)
latex_content = re.sub(r'\{ ', '{', latex_content)
latex_content = re.sub(r' \}', '}', latex_content)
template.tex
\somevalue{§{{ variable }}§}
views.py
template = select_template(self.get_template_names())
latex_content = template.render(context)
latex_content = re.sub(r'\{§', '{', latex_content)
latex_content = re.sub(r'§\}', '}', latex_content)
§
在任何地方都不打算显示。latex_content = template.render(context).encode('utf-8')
。在替换后,只需调用.encode('utf-8')
即可。 - Antoine Pinsard
{% spaceless %}\includegraphics[width=200pt]{ {{ logo_pdf }} } {% endspaceless %}
,但是spaceless
只适用于HTML。这需要一个类似的自定义标签来适用于LaTeX。 - Antoine Pinsard