在 Flask 模板中显示 属性 个对象而不是值
Displaying property object instead of value in Flask template
在我的 Python (3.5) Flask 项目中,我使用 CAS client 进行身份验证,一切正常。身份验证完成后,我想在输出页面中显示用户名。所以我使用下面的代码
__init__.py
:
from flask import Flask
from flask_cas import CAS
from flask_cas import login_required
# ...
APP = Flask(__name__)
cas = CAS(APP)
# ...
def list_page()
return render_template("list.html", name=cas.username)
@app.route('/admin/')
@login_required
def admin_page()
return list_page();
list.html
:
...
<H2> Hi {{name}} </h2>
...
在输出页面我看到
Hi <property object at 0x7fb37dfe6958>
如果不知道 __init__.py
中的 cas
变量是什么,就很难准确指出问题所在。但是我怀疑你的错误可能是因为 cas
是一个 class,而不是 class.
的一个实例
向您展示我的意思:
>>> class MyCAS:
... @property
... def name(self):
... return 'Monjur'
...
>>> MyCAS.name
<property object at 0x109cf1cc8>
>>> MyCAS().name
'Monjur'
第一种情况,我没有实例化class(没有括号),所以return的值就是属性对象。
在第二种情况下(带括号),我看到了实例的实际名称。
如果您的 cas
对象确实应该是从 class 实例化的对象(例如 flask.ext.cas.CAS
),请确保按如下方式创建它:
from flask.ext.cas import CAS
cas = CAS() # With parenthesis :)
而不是这样:
from flask.ext.cas import CAS
cas = CAS # No parenthesis :(
在我的 Python (3.5) Flask 项目中,我使用 CAS client 进行身份验证,一切正常。身份验证完成后,我想在输出页面中显示用户名。所以我使用下面的代码
__init__.py
:
from flask import Flask
from flask_cas import CAS
from flask_cas import login_required
# ...
APP = Flask(__name__)
cas = CAS(APP)
# ...
def list_page()
return render_template("list.html", name=cas.username)
@app.route('/admin/')
@login_required
def admin_page()
return list_page();
list.html
:
...
<H2> Hi {{name}} </h2>
...
在输出页面我看到
Hi <property object at 0x7fb37dfe6958>
如果不知道 __init__.py
中的 cas
变量是什么,就很难准确指出问题所在。但是我怀疑你的错误可能是因为 cas
是一个 class,而不是 class.
向您展示我的意思:
>>> class MyCAS:
... @property
... def name(self):
... return 'Monjur'
...
>>> MyCAS.name
<property object at 0x109cf1cc8>
>>> MyCAS().name
'Monjur'
第一种情况,我没有实例化class(没有括号),所以return的值就是属性对象。 在第二种情况下(带括号),我看到了实例的实际名称。
如果您的 cas
对象确实应该是从 class 实例化的对象(例如 flask.ext.cas.CAS
),请确保按如下方式创建它:
from flask.ext.cas import CAS
cas = CAS() # With parenthesis :)
而不是这样:
from flask.ext.cas import CAS
cas = CAS # No parenthesis :(