12

我通过复制/粘贴他们在其网站上提供的代码在我的页面上添加了一个 facebook 按钮。

它看起来像这样:

"http://www.facebook.com/dialog/feed?app_id={{fbapp_id}}&link={{link_url}}&message={{share_message|urlencode}}&display=popup&redirect_uri={{link_url}}  

正如你所看到的,它{}在那里Jinja寻找。但是,由于我希望将上述任何代码替换为任何内容,因此我可以在模板中添加一些内容来告诉Jinja忽略分隔符之间的所有内容吗?

Python处理程序:

class MainHandler(webapp2.RequestHandler):
    def get(self):
        template = JINJA_ENV.get_template('index.html')
        self.response.write(template.render(None))
4

2 回答 2

35

您通常可以在文档中的“转义”或类似内容下找到该信息。在这种情况下,您可以使用变量表达式输出分隔符:

{{ '{{' }}

或者您可以使用该raw块来获得更长的代码段:

{% raw %}
    <ul>
    {% for item in seq %}
        <li>{{ item }}</li>
    {% endfor %}
    </ul>
{% endraw %}
于 2013-08-06T01:43:47.687 回答
2

这个问题很老,但我最近遇到了同样的问题。如果您将 Jinja2 环境设置为使用 undefined=jinja2.DebugUndefined ,它将忽略丢失的参数并将它们保留为新的 Jinja 模板。对于说多阶段解析很有用,您还可以运行日志记录以了解何时尚未定义变量:

import logging
from Jinja2 import DebugUndefined

logging.basicConfig()
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
undefined_logging = jinja2.make_logging_undefined(logger=logger, base=DebugUndefined)
jinja_env = jinja2.Environment(loader=FileSystemLoader, undefined=undefined_logging)
print(jinja2.from_string("Hello {{ worldarg }}")

This will result in a logger message such as
[date time] WARNING [<module>:lineno] Template variable warning worldarg is undefined
Hello {{ worldarg }}

模板中的 jinja 将为传递的参数呈现,但未定义的未更改。注意:这不太可能解决例程定义的丢失模板或宏,但标准的 {{ x }} 类型应该被记录和不变。*日志记录也取决于其配置方式!

StrictUndefined(导致异常和模板处理停止)或 Undefined 的选项也存在,导致传递的参数被删除,并且预期的字段为空白,而不会将错误返回给调用函数。

于 2018-04-13T03:51:42.860 回答