如何从for循环中设置一个变量,可以从for循环外部访问[Jinja]

时间:2016-01-30 01:23:41

标签: python html5 python-2.7 jinja2

当用户点击链接时,我希望Jinja设置一个名为{{ contact_clicked }}的变量,该变量等于{{ contact }}

我可以做<a href="/?{% contact_clicked = contact %}">.....</a>。但是,该变量在for循环之外是不可访问的。

我尝试创建一个列表,然后将一个变量附加到列表中,然后访问列表中的第一个变量。但是,当页面重新加载(或在任何其他时间)时,列表不会擦除,因此变量将永久设置。

编辑1:
我的for循环看起来像这样:

    {% set contact_clicked = "" %}

    {% for contact in contact_list %}
        {% if contact in fake_list %}
            <h4 style="color: rgb(200,100,100)"> {{ contact }} NO SUCH ACCOUNT </h4>
        {% else %}
            <a href="/?{% contact_clicked = contact %}"> <h4 style="color: rgb(200,200,200)"> {{ contact }} </h4> </a>
        {% endif %}
    {% endfor %}

我说的是 Jinja2 for循环,不是Python for loop


解决
为了设置变量,我告诉Jinja指导我 / contact_msg / {{contact}} 。假设我点击了一个名为'bob'的联系人。我会被引导到 / contact_msg / bob 。代码在

之下
{% for contact in contact_list %}
    {% if contact in fake_list %}
        <h4 style="color: rgb(200,100,100)"> {{ contact }} NO SUCH ACCOUNT </h4>
    {% else %}
        <a href="/contact_msg/{{ contact }}"> <h4 style="color: rgb(200,200,200)"> {{ contact }} </h4> </a>
    {% endif %}
{% endfor %}

然后,在执行此操作时,用户将被定向到

@app.route('contact_msg/<contact>')
def contact_msg_page( contact ):
    session['contact_clicked'] = contact
    return redirect( url_for( 'home' ) )

在Flask中。因为contact是def contact_msg_page中的参数,所以Python中名为contact的局部变量设置为{{ contact }}(用户单击的链接)。然后,我将名为contact_clickedsession['contact_clicked']的会话变量设置为等于Python变量contact。既然我已经这样做了,我可以访问会话变量contact_clicked并完成我想用它做的所有事情。 (例如,当用户点击其联系人列表中的联系人时,它会选择他们以点击用户发送给他们的消息。)

2 个答案:

答案 0 :(得分:0)

只需在for循环之前声明变量:

randomStuff = int(0)

for i in range(0, 100):
   randomStuff += 1

print randomStuff

希望这有帮助,

杰森。

答案 1 :(得分:0)

已解决继续阅读以了解如何...
为了设置变量,我告诉Jinja指导我 / contact_msg / {{contact}} 。假设我点击了一个名为'bob'的联系人。我会被引导到 / contact_msg / bob 。代码在

之下
{% for contact in contact_list %}
    {% if contact in fake_list %}
        <h4 style="color: rgb(200,100,100)"> {{ contact }} NO SUCH ACCOUNT </h4>
    {% else %}
        <a href="/contact_msg/{{ contact }}"> <h4 style="color: rgb(200,200,200)"> {{ contact }} </h4> </a>
    {% endif %}
{% endfor %}

然后,在执行此操作时,用户将被定向到

@app.route('contact_msg/<contact>')
def contact_msg_page( contact ):
    session['contact_clicked'] = contact
    return redirect( url_for( 'home' ) )

在Flask中。因为contact是def contact_msg_page中的参数,所以Python中名为contact的局部变量设置为{{ contact }}(用户单击的链接)。然后,我将名为contact_clickedsession['contact_clicked']的会话变量设置为等于Python变量contact。既然我已经这样做了,我可以访问会话变量contact_clicked并完成我想做的所有事情(例如,当用户点击其联系人列表中的联系人时,它会选择他们发送消息由点击它们的用户发送给他们的)&lt; - 那是满口的。

我希望这可以帮助那些遇到类似问题的人。如果有人想问任何问题,请离开。我很乐意帮助你。