• <small id='TLgOx'></small><noframes id='TLgOx'>

    <legend id='TLgOx'><style id='TLgOx'><dir id='TLgOx'><q id='TLgOx'></q></dir></style></legend>

    <tfoot id='TLgOx'></tfoot>

    1. <i id='TLgOx'><tr id='TLgOx'><dt id='TLgOx'><q id='TLgOx'><span id='TLgOx'><b id='TLgOx'><form id='TLgOx'><ins id='TLgOx'></ins><ul id='TLgOx'></ul><sub id='TLgOx'></sub></form><legend id='TLgOx'></legend><bdo id='TLgOx'><pre id='TLgOx'><center id='TLgOx'></center></pre></bdo></b><th id='TLgOx'></th></span></q></dt></tr></i><div id='TLgOx'><tfoot id='TLgOx'></tfoot><dl id='TLgOx'><fieldset id='TLgOx'></fieldset></dl></div>
      • <bdo id='TLgOx'></bdo><ul id='TLgOx'></ul>
      1. 对于挡路赋值中的循环?

        时间:2024-08-21

            <bdo id='33iab'></bdo><ul id='33iab'></ul>
            <tfoot id='33iab'></tfoot>
            1. <small id='33iab'></small><noframes id='33iab'>

                • <i id='33iab'><tr id='33iab'><dt id='33iab'><q id='33iab'><span id='33iab'><b id='33iab'><form id='33iab'><ins id='33iab'></ins><ul id='33iab'></ul><sub id='33iab'></sub></form><legend id='33iab'></legend><bdo id='33iab'><pre id='33iab'><center id='33iab'></center></pre></bdo></b><th id='33iab'></th></span></q></dt></tr></i><div id='33iab'><tfoot id='33iab'></tfoot><dl id='33iab'><fieldset id='33iab'></fieldset></dl></div>
                  <legend id='33iab'><style id='33iab'><dir id='33iab'><q id='33iab'></q></dir></style></legend>
                    <tbody id='33iab'></tbody>
                  本文介绍了对于挡路赋值中的循环?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  这里是一个初级循环,在赋值挡路之外编译得很好:

                  {% for item in items %}
                    <p>{{item}}</p>
                  {% endfor %}
                  

                  但当我将循环放在assignment block中时,如

                  {% set stuff %}
                    {% for item in items %}
                      <p>{{item}}</p>
                    {% endfor %}
                  {% endset %}
                  

                  我收到AssertionError: Tried to resolve a name to a reference that was unknown to the frame ('item')

                  这个问题的动机是我使用宏来避免代码重复。例如,我有许多具有不同字段的div。其中一个div包含给用户的消息。在一种(但只有一种)情况下,我希望在此div中包含<ul>,因此在将生成的html作为参数传递给宏之前,我希望循环遍历列表中的元素,将每个元素包装在<li>标记中。因此我提出这个问题。

                  是否可以在赋值挡路内使用for循环?或者有没有更好的方法来实现同样的目标?

                  推荐答案

                  基于AssertionError: Tried to resolve a name to a reference that was unknown to the frame此问题仅在Jinja2版本3.x中存在。旧版本2.x工作正常。

                  此时需要先设置变量,然后才能在挡路中使用。也许以后他们会修好它。

                  {% set item = None %}
                  
                  {% set stuff %}
                    {% for item in items %}
                      <p>{{item}}</p>
                    {% endfor %}
                  {% endset %}
                  
                  {{ stuff }}
                  

                  但是set对我来说有一个很大的缺点:它不能获取参数,并且只能与items一起使用。
                  如果我设置{% set items = other_items %}

                  ,它就不能工作

                  我宁愿将代码放在macro中使用stuff(main_items)stuff(other_items)

                  {% macro stuff(items) %}
                    {% for item in items %}
                      <p>{{item}}</p>
                    {% endfor %}
                  {% endmacro %}
                  
                  {{ stuff(main_items) }}
                  
                  {{ stuff(other_items) }}
                  

                  最小工作代码:

                  from flask import Flask, render_template_string
                  
                  app = Flask(__name__)
                  
                  @app.route('/')
                  def index():
                      return render_template_string('''
                  <h1>SET</h1>
                  
                  {% set item = None %}
                  
                  {% set stuff_set %}
                    {% for item in items %}
                      <p>{{item}}</p>
                    {% endfor %}
                  {% endset %}
                  
                  {{ stuff_set }}
                  
                  <h1>MACRO</h1>
                  
                  {% macro stuff_macro(items) %}
                    {% for item in items %}
                      <p>{{item}}</p>
                    {% endfor %}
                  {% endmacro %}
                  
                  {{ stuff_macro(main_items) }}
                  {{ stuff_macro(other_items) }}
                  ''', items=['A', 'B', 'C'], main_items=[1,2,3], other_items=[4,5,6])
                  
                  if __name__ == '__main__':
                      #app.debug = True 
                      app.run()
                  

                  这篇关于对于挡路赋值中的循环?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:如何在JJUA中循环使用多个值的字典? 下一篇:引发烧瓶中JJJA模板中未定义属性的错误

                  相关文章

                    <bdo id='w9Ihe'></bdo><ul id='w9Ihe'></ul>
                  <tfoot id='w9Ihe'></tfoot>

                  <small id='w9Ihe'></small><noframes id='w9Ihe'>

                      <i id='w9Ihe'><tr id='w9Ihe'><dt id='w9Ihe'><q id='w9Ihe'><span id='w9Ihe'><b id='w9Ihe'><form id='w9Ihe'><ins id='w9Ihe'></ins><ul id='w9Ihe'></ul><sub id='w9Ihe'></sub></form><legend id='w9Ihe'></legend><bdo id='w9Ihe'><pre id='w9Ihe'><center id='w9Ihe'></center></pre></bdo></b><th id='w9Ihe'></th></span></q></dt></tr></i><div id='w9Ihe'><tfoot id='w9Ihe'></tfoot><dl id='w9Ihe'><fieldset id='w9Ihe'></fieldset></dl></div>
                      <legend id='w9Ihe'><style id='w9Ihe'><dir id='w9Ihe'><q id='w9Ihe'></q></dir></style></legend>