【问题标题】:jinja2 print to console or loggingjinja2 打印到控制台或日志
【发布时间】:2013-02-09 00:17:02
【问题描述】:

我是 Jinja2 的新手,想知道是否有办法让模板在生成时打印到控制台或将某些输出重定向到某种流?

由于 Jinja2 模板内部可能有逻辑,我认为有时将一些信息记录到某种日志文件中会很有用,或者至少打印到控制台。

这是可能的还是我只是在说垃圾?

【问题讨论】:

    标签: python template-engine jinja2


    【解决方案1】:

    我认为您可以使用过滤器 (http://jinja.pocoo.org/docs/api/#custom-filters) 或扩展 (http://jinja.pocoo.org/docs/extensions/#adding-extensions) 来实现它。这个想法是将过滤器或扩展直接打印到控制台。

    未测试,但过滤器应该类似于:

    def debug(text):
      print text
      return ''
    
    environment.filters['debug']=debug
    

    用作:

    ...<p>Hello world!</p> {{"debug text!"|debug}}...
    

    记得删除生产代码的调试!

    【讨论】:

    • 太酷了!我知道应该有一些方法来实现它。现在,我有一个问题。我无法将文字字符串发送到自定义过滤器,我可以使用 {% set text="debug text!" 来实现它%} 标签,然后是 {{ text |调试}}。我不知道是否可以将文字字符串发送到过滤器...:-o
    • 好吧,使用 '()' 将我需要打印的所有字符串括起来,部分解决了它(或者也许应该是这样)。例如 {{ ("调试文本!") |调试}}。或者更准确地说: {{ ("debug text! value: "~valueINeedToLog) |调试 }}
    【解决方案2】:

    使用上下文处理器的类似但略有不同的方法:

    在python/flask中:

    @app.context_processor
    def utility_functions():
        def print_in_console(message):
            print str(message)
    
        return dict(mdebug=print_in_console)
    

    在jinja2中,在任何地方使用如下:

    {{ mdebug("any text or variable") }}
    

    【讨论】:

      【解决方案3】:

      我将有一个带有 id 集的 HTML 元素和该元素的 hidden 属性。然后像这样使用JavaScript

      <p id="hidden-p">{{a_variable}}</p>
      <script>
          var hiddenP = document.getElementById("hidden-p").innerHTML;
          console.log(hiddenP);
      </script>
      

      【讨论】:

        猜你喜欢
        • 2015-10-28
        • 1970-01-01
        • 2023-04-01
        • 2018-11-28
        • 1970-01-01
        • 2016-12-20
        • 2010-10-22
        • 2020-08-26
        • 1970-01-01
        相关资源
        最近更新 更多