Исключение TemplateSyntaxError
Исключение TemplateSyntaxError выбрасывается, когда движок шаблонов Django обнаруживает синтаксическую ошибку при парсинге или компиляции шаблона. Это исключение наследуется от встроенного исключения SyntaxError и содержит информацию о месте возникновения ошибки в шаблоне. Наиболее часто возникает при неправильном использовании тегов, фильтров, переменных или при нарушении правил синтаксиса шаблонов.
Синтаксис
django.template.TemplateSyntaxError
Исключение принимает следующие параметры:
TemplateSyntaxError(message, source=None, line=None, column=None, filename=None)
где:
-
message- сообщение об ошибке; -
source- исходный код шаблона; -
line- номер строки с ошибкой; -
column- номер колонки с ошибкой; -
filename- имя файла шаблона.
Пример
Рассмотрим шаблон, содержащий закрывающий тег без соответствующего открывающего:
from 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)
Результат выполнения кода:
"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 %}"
Пример
Ошибка возникает при использовании несуществующего фильтра в шаблоне:
from 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)
Результат выполнения кода:
"Error: Could not parse the remainder: '|unsupported_filter' from 'text|unsupported_filter'"
"Line: 2"
"Filename: None"
Пример
Неправильное использование тега if с неверным синтаксисом условий:
from 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)
Результат выполнения кода:
"Error: Invalid block tag on line 2: 'or', expected 'and' or 'or'"
"Line: 2"
Смотрите также
-
исключение
TemplateDoesNotExist,
которое возникает при отсутствии запрашиваемого шаблона -
исключение
VariableDoesNotExist,
которое возникает при обращении к несуществующей переменной в шаблоне -
исключение
ImproperlyConfigured,
которое возникает при некорректной конфигурации приложения -
исключение
Http404,
которое выбрасывается при отсутствии запрашиваемого ресурса