Исключение TemplateSyntaxError

Исключение TemplateSyntaxError выбрасывается, когда движок шаблонов Django обнаруживает синтаксическую ошибку при парсинге или компиляции шаблона. Это исключение наследуется от встроенного исключения SyntaxError и содержит информацию о месте возникновения ошибки в шаблоне. Наиболее часто возникает при неправильном использовании тегов, фильтров, переменных или при нарушении правил синтаксиса шаблонов.

Синтаксис

pythondjango.template.TemplateSyntaxError

Исключение принимает следующие параметры:

pythonTemplateSyntaxError(message, source=None, line=None, column=None, filename=None)

где:

Пример

Рассмотрим шаблон, содержащий закрывающий тег без соответствующего открывающего:

pythonfrom django.template import Template, Context

template_code = """
<ul>
  {% for item in items %}
    <li>{{ item }}</li>
  {% endfor %}
</ul>
"""

try:
  template = Template(template_code)
  context = Context({'items': ['one', 'two', 'three']})
  res = template.render(context)
except TemplateSyntaxError as e:
  print("Error:", e.message)
  print("Line:", e.line)
  print("Source:", e.source)

Результат выполнения кода:

python"Error: Invalid block tag on line 3: 'endfor', expected 'empty' or 'endfor'. Did you forget to register or load this tag?"
"Line: 3"
"Source: {% for item in items %}"

Пример

Ошибка возникает при использовании несуществующего фильтра в шаблоне:

pythonfrom django.template import Template, Context

template_code = """
<p>{{ text|unsupported_filter }}</p>
"""

try:
  template = Template(template_code)
  context = Context({'text': 'Hello World'})
  res = template.render(context)
except TemplateSyntaxError as e:
  print("Error:", e.message)
  print("Line:", e.line)
  print("Filename:", e.filename)

Результат выполнения кода:

python"Error: Could not parse the remainder: '|unsupported_filter' from 'text|unsupported_filter'"
"Line: 2"
"Filename: None"

Пример

Неправильное использование тега if с неверным синтаксисом условий:

pythonfrom django.template import Template, Context

template_code = """
{% if user.is_authenticated and user.is_admin or %}
  <p>Admin panel</p>
{% endif %}
"""

try:
  template = Template(template_code)
  context = Context({'user': None})
  res = template.render(context)
except TemplateSyntaxError as e:
  print("Error:", e.message)
  print("Line:", e.line)

Результат выполнения кода:

python"Error: Invalid block tag on line 2: 'or', expected 'and' or 'or'"
"Line: 2"

Смотрите также

  • исключение TemplateDoesNotExist,
    которое возникает при отсутствии запрашиваемого шаблона
  • исключение VariableDoesNotExist,
    которое возникает при обращении к несуществующей переменной в шаблоне
  • исключение ImproperlyConfigured,
    которое возникает при некорректной конфигурации приложения
  • исключение Http404,
    которое выбрасывается при отсутствии запрашиваемого ресурса