Разобрать объект почтового индекса, используя ast.literal_eval () или eval () - PullRequest
0 голосов
/ 25 июня 2019

У меня есть объект zip, доступный на странице шаблона Jinja, и когда пользователь нажимает какую-либо ссылку, я отправляю этот объект zip в качестве параметра запроса.А затем я пытаюсь проанализировать zip-объект с помощью ast.literal_eval (), но получаю ошибку «Неверный синтаксис».

Я пытался использовать eval () в качестве literal_eval ().Но оба дают мне одну и ту же ошибку.Я искал это, но не нашел ничего, что описывает, как разобрать нотацию "".

views.py

data = request.GET
movies,moviesindxs = zip(*literal_eval(data.get("movies")))

jinja template

{% 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 голосов
/ 25 июня 2019

Проблема была с изменением реализации функции zip().Как zip() в Python2.x используется для возврата списка кортежей, который работал бы с ast.literal_eval().Но в Python3.x zip() функция возвращает ленивый итератор, который не может быть проанализирован с помощью ast.literal_eval или 'eval ()'.По этой причине сейчас я отправляю list(zip()) из views.py в шаблон Jinja.Который может быть отправлен обратно на views в параметрах запроса как list литерал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...