Мако дает SyntaxError на действительный код? - PullRequest
1 голос
/ 12 апреля 2011

Я пытаюсь использовать блок кода в шаблоне mako, но независимо от того, что я вставил в блок, Мако непреклонен, это синтаксическая ошибка.

Вот фрагмент рассматриваемого блока:

  <td class="col_sm_space">&nbsp;</td>
  <%
      if session.dist == "metric":
          delta_distance = "%.2fkm" % (trk["d_distance"] / 1000.0)
          delta_fuel = "%.2fl" % (trk["d_fuel"])
          delta_co2 = "%.2fg" % (trk["d_co2"])
          delta_co2_rate = "%.2fg/l" % trk["d_co2_rate"])
          trip_av_speed = "%dkm/h" % int(trk["trip_av_speed"])
          trip_peak_speed = "%dkm/h" % int(trk["trip_peak_speed"])
  %>
  <td class="col_field" title="${delta_distance}">${trk["trip_distance"]}</td>

Я получаю синтаксическую ошибку в строке if session.dist == "metric":, хотя я могу заменить ее на что угодно (например, foo = "bar"), и она все равно выдаст мне ошибку.

Мако возвращается:

SyntaxException: (SyntaxError) invalid syntax (line 5) ('if session.dist == "metric":\\n delta_distance = ') in file '<snipped>' at line: 271 char: 9\n, referer: <snipped>

Линия 271 - это открытие <%. Char 9 будет началом if на следующей строке, очевидно.

Как ни странно, я использую ту же самую настройку на других страницах, и с ними все в порядке - просто не здесь.

Что-нибудь явно очевидное, что я здесь скучаю?

Ответы [ 4 ]

2 голосов
/ 02 марта 2012

У меня был действительно расстраивающий опыт с этим. В моем случае, по крайней мере, сообщение об ошибке было совершенно неверным. Он указывал на первую строку блока python, как у вас, когда фактическая ошибка была в другом блоке python, спустя 50 строк.

Скорее всего, у вас есть простая синтаксическая ошибка, такая как неверный отступ или пропущенное двоеточие после оператора if ... Я не могу дать вам лучший совет по отладке, чем пробежка по вашему питону с помощью мелкозубой расчески. Если это возможно для юнит-тестирования ваших блоков Python за пределами Мако, это может быть полезно.

1 голос
/ 27 марта 2014

В шаблонах mako,
, когда вы используете условный оператор, например, если, для и т. Д., Это должно быть так:
%, если условие
некоторый код
% endif

И для присвоения, вы должны встроить эту вещь в <% %>

Если вы будете следовать этому, ваш код будет работать.

1 голос
/ 03 февраля 2013

Это было задано очень давно, но для записи пропущено левое слово ",", в этой строке неясно, вызывает ли это проблему, но кажется вероятным:

delta_co2_rate = "%.2fg/l" % trk["d_co2_rate"])

Должно быть не менее:

delta_co2_rate = "%.2fg/l" % (trk["d_co2_rate"])
0 голосов
/ 21 марта 2018

Мой опыт показал, что у меня был следующий синтаксис:

% if ${use_force_ssl} == 1:

Вместо этого это должно было быть так:

% if use_force_ssl == 1:

Надеюсь, это кому-нибудь поможет.

...