Py学习  »  Python

在HTML(Python应用程序)中使用变量时,在{name}周围放置不必要的括号

Callum • 3 年前 • 1564 次点击  

我正在创建一个Python Flask应用程序,其中用户帐户的名称将从MySQL数据库传递到一个Flask应用程序,该应用程序可以在网页上使用。

我已经成功地使用以下方法从数据库中的用户凭据中检索到了名字:

if sha256_crypt.verify(userDetails['password'], str (data[0])):
    cursor.execute("SELECT fname FROM user_details WHERE email = %s;", (email, ))
    name = cursor.fetchone()
    session['user'] = name
    return redirect(url_for('success', name=name))

为了解释这段代码的作用,一旦用户输入的登录详细信息被数据库检查并授权,查询就会从 user_details 表并将其分配给 name 变量,该名称用于启动会话。

然后,用户返回到登录页面(现在已登录),其中另一个变量调用 名称 (我可能会对此进行更改,以便更容易区分)传递存储在会话中的名称,以便使用此功能在网站上显示:

@app.route('/loginpage', methods=['POST', 'GET'])
def loginpage():
    if 'user' in session:
        name = session['user']
        return render_template('login.html', name=name, loggedOut=False, loggedIn=True)
    return render_template('login.html', loggedOut=True, loggedIn=False)

这一切都成功地工作,并从数据库中检索用户的名字,但唯一的问题是,当名称显示为 {{name}} 在HTML中,名称显示为 (‘约翰’,) ,例如,这意味着:

<div class="container logout-greeting">
    <h5 style="text-align: center">Hello {{name}}, it appears you are logged in, click here to log out</h5>
</div>

应显示为:

“你好,John,您似乎已登录,请单击此处注销”

而是显示为:

“您好(‘John’),您似乎已登录,请单击此处注销”

我与一位在构建Web应用程序方面更有经验的人进行了交流,但他们没有发现问题,那么是否有其他人可以给我一个指针,说明是什么导致了这种情况?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132956
文章 [ 2 ]  |  最新文章 3 年前
vincent
Reply   •   1 楼
vincent    3 年前

光标。fetchone()返回一个包含所有 columns of the row . 它的字符串表示形式如下所示。

您可以通过选择响应中的第一项来解决此问题:

values = cursor.fetchone()
if values:
    name = values[0]
Amadan
Reply   •   2 楼
Amadan    3 年前

cursor.fetchone() 以元组形式返回一行中的所有选定字段。例如,如果你做了 SELECT first, last ... ,你会得到一个2元组 ("John", "Smith") .

您只请求了一个字段,所以得到了1元组 ("John",) :你没有字符串 "John" ! 改为:

name = cursor.fetchone()[0]

编辑:或者,正如文森特在下面警告的那样,更加有力:

row = cursor.fetchone()
name = row[0] if row else None

看见 How to create a tuple with only one element 讨论1元组,以及为什么有逗号。