未定义的unicode错误 - flask-flatpages和python 3

1 投票
1 回答
1616 浏览
提问于 2025-04-18 10:57

我安装了 Flask-FlatPages,现在想运行一个简单的应用程序(用来显示 .md 文件):

import sys
from flask import Flask, render_template
from flask_flatpages import FlatPages, pygments_style_defs

DEBUG = True
FLATPAGES_AUTO_RELOAD = DEBUG
FLATPAGES_EXTENSION = '.md'
FLATPAGES_ROOT = 'content'
POST_DIR = 'posts'

app = Flask(__name__)
flatpages = FlatPages(app)
app.config.from_object(__name__)

@app.route("/posts/")
def posts():
    posts = [p for p in flatpages if p.path.startswith(POST_DIR)]
    posts.sort(key=lambda item:item['date'], reverse=False)
    return render_template('posts.html', posts=posts)

@app.route('/posts/<name>/')
def post(name):
    path = '{}/{}'.format(POST_DIR, name)
    post = flatpages.get_or_404(path)
    return render_template('post.html', post=post)

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)

每次我运行这个应用时,都会出现这个错误:

NameError: name 'unicode' is not defined

这个错误的追踪信息(flask-flatpages)是:

File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask_flatpages/__init__.py", line 290, in _pages
_walk(unicode(self.root))

我知道在 Python 3 中,unicode 现在变成了 str -- 我能在我的应用中解决这个问题吗(不修改这个包)?

1 个回答

3

如果这个软件包不支持Python 3,那你就很难让它正常工作。你可以等着它更新支持,或者找一个替代的软件包。如果唯一的问题是缺少unicode的定义,那可以在导入flask_flatpages之前用一种叫“猴子补丁”的方法来解决,如下所示:

import builtins
builtins.unicode = str

不过我怀疑缺少unicode只是其中一个问题。

撰写回答