【问题标题】:Changing variable value in base html template更改基本 html 模板中的变量值
【发布时间】:2018-07-21 16:19:43
【问题描述】:

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

技术: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 页面时向服务器发送检查请求。 “退出”按钮上的单击事件会导致用户状态发生变化。有可能这样做吗?如果是这样,那怎么办?

【问题讨论】:

  • 我假设你也在使用 Flask?
  • 是的。我正在使用 Flask

标签: python flask jinja2


【解决方案1】:

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

@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

【讨论】:

  • 据我了解,您每次用户访问任何 html 页面时都会向服务器发送请求。如果我不想在每次用户访问我的网络应用程序上的任何页面时检查用户状态,是否有更好的选择。不使用全局标志有更好的选择吗?
  • 你会如何检查用户是否实际登录?
  • @John 好吧,我真的不知道这个问题是否真的是关于 Flask ;)
  • 老实说,我认为这个问题与 Flask 无关,更多的是关于交互的一般方面,包括 html-flask-jinja2
  • 根据Edit One,我不认为你的问题真的有帮助......
猜你喜欢
  • 2021-03-14
  • 2021-09-14
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 2016-06-04
  • 2022-01-09
  • 1970-01-01
  • 2019-03-05
相关资源
最近更新 更多