Мако считает, что мой шаблон имеет «pass» после оператора if, хотя трассировка показывает, что его нет - PullRequest
1 голос
/ 09 февраля 2010

У меня есть Мако, берущий шаблон из препроцессора, и теперь думает, что после моего оператора if есть «проход».

Вот полный след

Error !
SyntaxException: (SyntaxError) invalid syntax (, line 1) (u"if ${session['anonymous']}:pass") in file '/.../site/templates/shpaml/views/index.html' at line: 3 char: 1
1 <p>your anonymous status is ${session['anonymous']}</p>
2
3 % if ${session['anonymous']}:
4
5 <a href='/login/'>login</a>
6
7 % else:
8
/.../site/library/mako/pyparser.py, line 37:
raise exceptions.SyntaxException("(%s) %s (%s)" % (e.__class__.__name__, str(e), repr(code[0:50])), **exception_kwargs)
/.../site/library/mako/ast.py, line 30:
expr = pyparser.parse(code.lstrip(), "exec", **exception_kwargs)
/.../site/library/mako/ast.py, line 82:
super(PythonFragment, self).__init__(code, **exception_kwargs)
/.../site/library/mako/parsetree.py, line 69:
code = ast.PythonFragment(text, **self.exception_kwargs)
/.../site/library/mako/lexer.py, line 94:
node = nodecls(*args, **kwargs)
/.../site/library/mako/lexer.py, line 313:
self.append_node(parsetree.ControlLine, keyword, isend, self.escape_code(text))
/.../site/library/mako/lexer.py, line 152:
if self.match_control_line():
/.../site/library/mako/template.py, line 257:
node = lexer.parse()
/.../site/library/mako/template.py, line 93:
(code, module) = _compile_text(self, file(filename).read(), filename)
/.../site/library/mako/lookup.py, line 127:
self.__collection[uri] = Template(uri=uri, filename=posixpath.normpath(filename), lookup=self, module_filename=(self.modulename_callable is not None and self.modulename_callable(filename, uri) or None), **self.template_args)
/.../site/library/mako/lookup.py, line 85:
return self.__load(srcfile, uri)
/.../site/library/templates/__init__.py, line 25:
template = lookup_map[type].get_template(template_name)

Почему трассировка показывается, но не отображается в источнике трассировки? Кроме того, он говорит неправильный номер строки. $ {session ['anonymous']} в строке 1 возвращает True (если я удалю синтаксическую ошибку). Так что с этим проблем нет.

1 Ответ

1 голос
/ 09 февраля 2010

Ну, это один из тех смущающих случаев, когда потребовались дни мучений, чтобы понять что-то настолько простое:

Это должно было быть

if session['anonymous']:
...