gpt4 book ai didi

使用截断过滤器的Python 3.5 TypeError : a bytes-like object is required,而不是 'str'

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:06 25 4
gpt4 key购买 nike

我正在尝试将我的 Python Flask 应用程序从 2.7 转换为 3.5。我有一个使用 SQLAlchemy 的简单 CMS 系统,其中我的页面显示在索引页面上,并带有标题和内容(已被截断)。这就是我的问题发生的地方。

它以列表形式返回我的页面,以字符串形式返回我的内容。我尝试对“页面”进行编码,但这会返回另一个错误,因为列表对象不允许这样做。

错误:

  File "C:\Python35\lib\site-packages\jinja2\filters.py", line 481, in do_truncate
result = s[:length - len(end)].rsplit(' ', 1)[0]
TypeError: a bytes-like object is required, not 'str'

路线:

@app.route("/")
def main():
pages = db.session.query(Pages).all()
return render_template('index.html', title='Dashboard', pages=pages)

index.html页面

{% for page in pages %}
<div>
<a href="{{ url_for('view_page', page_id=page.id) }}"><h3>{{ page.title|truncate(150) }}</h3></a>
<p>{{ page.content|truncate(450)|striptags }}</p>
</div>
{% endfor %}

最佳答案

该错误是由于 page.titlebytes 对象引起的。您不能将 bytes.rsplit()str 值一起使用(这是 truncate 的作用)。 truncate 过滤器仅支持 str Unicode 值。

您必须确保 pages.title 是 unicode str 对象。为此,可以在模板中进行解码,或者将 title 字段定义为 Unicode 字符串,而不是模型和数据库中的字节。

模板中的解码可以通过以下方式完成:

{{ page.title.decode('utf8')|truncate(150) }}

前提是您的数据实际上是 UTF-8 编码的。

这在 Python 2 中不是问题,因为字节串会根据需要默默地转换为 unicode 字符串(前提是它们可以被解码)。

关于使用截断过滤器的Python 3.5 TypeError : a bytes-like object is required,而不是 'str',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40511900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com