【问题标题】:How to set a variable from inside a for loop that can be accessed from outside the for loop [Jinja]如何从 for 循环内部设置一个可以从 for 循环外部访问的变量 [Jinja]
【发布时间】:2016-05-07 22:04:45
【问题描述】:

当用户单击链接时,我希望 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 循环

【问题讨论】:

  • 您提到了一个 for 循环,但没有显示它。请添加更多代码,以便我们查看上下文。
  • 根据您的描述以及我是如何习惯使用 jinja2 或类似软件的,我不确定您是否以正确的方式考虑这个问题。我习惯于让 Jinja2 在服务器(运行 Flash、Django 或其他 Web 框架)上生成一个 HTML 页面,然后将其传递给客户端......除非你想刷新整个页面,否则客户端点击需要由javascript处理。您能否阐明您的环境是如何设置的,并包含更多的 html/etc。对于上下文

标签: python html python-2.7 jinja2


【解决方案1】:

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

randomStuff = int(0)

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

print randomStuff

希望这会有所帮助,

杰森。

【讨论】:

  • 我很确定 OP 指的是Jinja2 template for loops,而不是 Python for 循环。但我们必须等待并查看更多代码才能确定。
  • 抱歉没有添加足够的信息,我的意思是{% for contact in contact_list %} &lt;a href="/?{% contact_clicked = contact %}&gt; {{ contact }} &lt;/a&gt; {% endfor %}
  • @Chris 谢谢,我添加了“EDIT1”
【解决方案2】:

已解决继续阅读以了解如何...
为了设置一个变量,我告诉 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' ) )

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

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

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 2018-11-18
    • 2012-05-11
    • 2021-06-29
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多