我在Jinja模板页面中有一个zip对象,当用户单击某个链接时,我会将那个zip对象作为请求参数发送。然后我尝试使用ast.literal_eval()解析zip对象,但出现“无效语法”错误。
我尝试使用eval()作为literal_eval()。但是两者都给了我同样的错误。我进行了搜索,但没有找到任何描述如何解析“”符号的内容。
views.py
data = request.GET
movies,moviesindxs = zip(*literal_eval(data.get("movies")))
神社模板
{% for movie,movieindx in movies %}
<a href="{% url 'rate_movie' %}?&movies={{movies}}&movie={{movie}}&movieindx={{movieindx}}" method="GET">Random Text</a>
{% endfor %}
File "~/path/to/Django/app/views.py", line 198, in rate_movie
movies, moviesindxs = zip(*literal_eval(data.get("movies")))
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ast.py", line 48, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
<zip object at 0x12d6549c8>
答案 0 :(得分:0)
问题在于zip()
函数的实现发生了变化。正如zip()
in Python2.x用来返回元组列表那样,它可以与ast.literal_eval()
一起使用。但是在Python3.x zip()
中,函数返回一个惰性迭代器,无法使用ast.literal_eval
或'eval()'进行解析。因此,基于这个原因,我现在将list(zip())
从 views.py 发送到Jinja模板。可以在请求参数中作为views
文字发送回给list
。