更改基本html模板中的变量值

时间:2018-02-11 10:25:47

标签: python flask jinja2

我需要在基本html模板中更改变量login_status的值,该模板用于每个html页面 Web应用程序。

Tech:jinja2,python。

如果登录个人帐户成功,则login_status获得字符串值'logout', 如果不是 - '登录'。但正确的改变只发生在个人账户的一页,当我跳 到另一个页面,此变量不会更改并具有默认值。

请帮我处理这个,显示在每个html页面上更改此变量的方法。

谢谢!

base.html文件

<li class="in">{{login_status | default('login')}}</li>
 <form name="form_in" method = 'post' action = '/personal_account'>
       <input type="text"  placeholder="Login" id="log" name="login"/>
       <input type="password"  placeholder="Password" id="pass" name="password"/>
       <input type="submit"/>
 </form>

python函数

@app.route('/personal_account', methods=['POST'])
    def welcome():
        login = request.form['login']
        password = request.form['password']
        login_status = u'logout'
        if not validate_user(login, password):
            login_status = u'login'
            return u'Incorrect login!', login_status
        data = get_user_data(login)
        return render_template('private.html',
                               data=data,
                               login_status=login_status)

编辑一个

我想只检查用户的状态一次,然后保存并遍历我的应用程序页面,而不是每次更改html-page时都向服务器发送检查请求。 “退出”按钮上的单击事件会导致更改用户的状态。有可能吗?如果是这样,那怎么样?

1 个答案:

答案 0 :(得分:0)

有很多方法可以实现这一目标,其中一种最简单的方法是将当前登录的用户对象附加到全局应用程序上下文中:

@app.before_request
def before_request():
    g.user = None
    # Now this is your application specific code:
    if 'user_id' in session:
        g.user = load_user_info(user_id)

现在您可以在模板中使用此对象:

 {% if g.user %}
 User is logged in
 {% else %}
 User not logged in
 {% endif %}

[编辑]:另一种选择是依赖于Flask的会话,默认情况下默认为客户端cookie。只需浏览Sessions quickstart in docs