使用ast.literal_eval()或eval()解析zip对象

时间:2019-06-24 22:28:52

标签: python django python-3.x jinja2

我在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>

1 个答案:

答案 0 :(得分:0)

问题在于zip()函数的实现发生了变化。正如zip() in Python2.x用来返回元组列表那样,它可以与ast.literal_eval()一起使用。但是在Python3.x zip()中,函数返回一个惰性迭代器,无法使用ast.literal_eval或'eval()'进行解析。因此,基于这个原因,我现在将list(zip()) views.py 发送到Jinja模板。可以在请求参数中作为views文字发送回给list