Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.5 TypeError:需要类似字节的对象,而不是';str';使用截断滤波器_Python_Python 3.x_Flask_Jinja2 - Fatal编程技术网

Python 3.5 TypeError:需要类似字节的对象,而不是';str';使用截断滤波器

Python 3.5 TypeError:需要类似字节的对象,而不是';str';使用截断滤波器,python,python-3.x,flask,jinja2,Python,Python 3.x,Flask,Jinja2,我正在尝试将我的Python Flask应用程序从2.7转换为3.5。我有一个使用SQLAlchemy的简单CMS系统,其中我的页面显示在带有标题和内容(被截断)的索引页面上。这就是我的问题所在 它以列表的形式返回我的页面,以字符串的形式返回我的内容。我试图对“页面”进行编码,但这会返回另一个错误,因为列表对象上不允许这样做 错误: File "C:\Python35\lib\site-packages\jinja2\filters.py", line 481, in do_truncate

我正在尝试将我的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.content | truncate(450)| striptags}}

{%endfor%}
错误是由
页面引起的。title
字节
对象。不能将
bytes.rsplit()
str
值一起使用(这就是
truncate
的作用)。
truncate
过滤器仅支持
str
Unicode值

您必须确保
页面。title
是一个unicode
str
对象。通过在模板中解码,或者通过在模型和数据库中将
title
字段定义为Unicode字符串而不是字节来实现

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

{{ page.title.decode('utf8')|truncate(150) }}
如果您的数据实际上是UTF-8编码的


这在Python2中不是一个问题,因为ByTestRing会根据需要(并且可以解码)以静默方式转换为
unicode
字符串。

因此
page.title
是一个字节对象。
truncate
过滤器仅适用于
str
对象。