如何在jinja 2中中断for循环|巨蟒- Django

vkc1a9a2  于 2023-01-31  发布在  Go
关注(0)|答案(3)|浏览(429)

大家好,请建议我如何在忍者2中为循环使用break
我正在使用带有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。我正在发送所有用户数据,并检查输入是否与其他用户refercode相同。上面的代码是只给我最后一行refercode相同。请告诉我如何在我的if条件为真时中断for循环,或者其他建议。

11dmarpk

11dmarpk1#

Jinja2同时支持break和continue,你只需要安装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')
wnvonmuf

wnvonmuf2#

根据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不支持中断或继续语句

你必须用其他方法来解决这个问题
这是我想到的我没有尝试代码,但这里的想法。

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']

cunj1qz1

cunj1qz13#

循环控制导入名称:jinja2.ext.loopcontrols
这个扩展增加了对循环中break和continue的支持。启用后,Jinja提供了这两个关键字,它们的工作方式与Python完全相同。
提供在模板循环中中断和继续的能力,就像标准的Python关键字break和continue一样。
资料来源:https://jinja.palletsprojects.com/en/2.11.x/extensions/#loop-controls
添加扩展在创建时添加到Jinja环境。创建环境后,将无法添加其他扩展。若要添加扩展,请将扩展类或导入路径的列表传递到Environment构造函数的extensions参数。下面的示例创建加载了i18n扩展的Jinja环境:
jinja_env =环境(扩展名=['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

相关问题