【问题标题】:How to break for loop in jinja2如何在jinja2中打破for循环
【发布时间】:2019-02-19 07:18:15
【问题描述】:

嗨,用户请告诉我如何在 jinja 2 中 break for 循环

我正在使用带有if 条件的for 循环,如果我的if 条件是true,我想中断循环

这是我的代码

function refercheck(){
        var input_value = document.getElementById('refer').value;
        {% for i in refer %}
        document.getElementById("valid").innerHTML = '';
        if( input_value == "{{i.refercode}}" ){
            $('#valid').append('Referred By {{i.username}}');
        }

我在input onkeyup="refercheck()" 中使用此函数,并从视图函数发送dict 我的dict 键是refer 我正在发送所有用户数据并检查输入是否与其他用户引用代码相同这是只给我最后一行参考代码相同请告诉我当我的 if 条件为真或其他解决方案时我如何打破循环

【问题讨论】:

标签: javascript django jinja2


【解决方案1】:

根据this answer,可以在for循环语句中添加条件

简单地说:

function refercheck(){
    var input_value = document.getElementById('refer').value;
    document.getElementById("valid").innerHTML = '';
    {% for i in refer if input_value == i.refercode %}
        $('#valid').append('Referred By {{i.username}}');
    {% endfor %}


更新: Jinja2 不支持 break 或 continue 语句

你必须使用其他方法来解决这个问题

这就是我想到的 我没有尝试代码,但这里是想法。

function refercheck(){
    var input_value = document.getElementById('refer').value;
    refer = {{refer|safe}}

    for (i = 0; i < refer.length; i++) {
        document.getElementById("valid").innerHTML = '';
        if( input_value == i.refercode ){
            $('#valid').append('Referred By '+i.username);
            break;
        }
    }
}

如果i.refercodei.refercode 不起作用,请尝试i['refercode']i['refercode']

【讨论】:

  • 先生,我尝试了它不起作用,它给了我错误'for' statements should use the format 'for x in y': for i in refer if input_value == i.refercode
  • 我更新了我的评论。我希望这能解决你的问题
【解决方案2】:

循环控制 导入名称:jinja2.ext.loopcontrols

这个扩展增加了对循环中断和继续的支持。启用后,Jinja 提供了这两个关键字,它们的工作方式与 Python 中的完全一样。

提供在模板循环中中断和继续的能力,就像标准的中断和继续 Python 关键字一样。

来源:https://jinja.palletsprojects.com/en/2.11.x/extensions/#loop-controls

添加扩展在创建时添加到 Jinja 环境中。创建环境后,无法添加其他扩展。要添加扩展,请将扩展类列表或导入路径传递给 Environment 构造函数的 extensions 参数。以下示例创建一个加载了 i18n 扩展的 Jinja 环境:

jinja_env = Environment(extensions=['jinja2.ext.loopcontrols'])

from django.templatetags.static import static
from django.urls import reverse
from jinja2 import Environment


def environment(**options):
    env = Environment(**options, extensions=['jinja2.ext.loopcontrols'])
    env.globals.update({
        'static': static,
        'url': reverse,
    })
    return env

【讨论】:

    【解决方案3】:

    Jinja2 支持break 并继续。你只需要安装ext.loopcontorls并激活jinja环境。

    这是文档链接。 https://jinja.palletsprojects.com/en/2.11.x/api/?highlight=ext%20loopcontrols

    我不确定这在 Django 中如何工作,但在 Flask 中,您只需在应用工厂中添加扩展:

        app = Flask(__name__,
                    static_url_path='',
                    static_folder='../app/static',
                    template_folder='../app/templates')
        app.jinja_env.add_extension('jinja2.ext.loopcontrols')
    

    【讨论】:

      猜你喜欢
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 2018-06-14
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多