Исключение VariableDoesNotExist

Исключение VariableDoesNotExist относится к модулю django.template и возникает в процессе обработки шаблона, когда в контексте шаблонизатора отсутствует переменная, к которой пытаются обратиться. Это исключение наследуется от TemplateSyntaxError и сигнализирует о том, что в контексте рендеринга отсутствует необходимая переменная.

Синтаксис

pythonraise VariableDoesNotExist("Variable 'variable_name' does not exist")

Исключение может быть перехвачено и обработано в коде, который выполняет рендеринг шаблонов с использованием контекста.

Пример

Давайте рассмотрим ситуацию, когда возникает исключение из-за обращения к несуществующей переменной в шаблоне:

pythonfrom django.template import Context, Template

# Шаблон, в котором используется переменная 'title'
template_str = "<h1>{{ title }}</h1>"
template = Template(template_str)

# Создаем контекст без переменной 'title'
context = Context({})

try:
  res = template.render(context)
  print(res)
except Exception as e:
  print(f"Error: {e}")

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

python"Error: Variable 'title' does not exist"

Пример

Исключение также может возникнуть при работе с фильтрами, которые пытаются получить доступ к вложенным атрибутам несуществующего объекта:

pythonfrom django.template import Context, Template

# Шаблон с обращением к атрибуту несуществующей переменной
template_str = "<p>{{ article.title }}</p>"
template = Template(template_str)

# Контекст не содержит переменной 'article'
context = Context({})

try:
  res = template.render(context)
  print(res)
except Exception as e:
  print(f"Caught: {e}")

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

python"Caught: Variable 'article' does not exist"

Пример

Для предотвращения ошибки можно использовать тег with или фильтр default, однако в некоторых случаях исключение возникает при некорректной передаче контекста в метод render. Рассмотрим корректную обработку ситуации с помощью проверки наличия переменной:

pythonfrom django.template import Context, Template
from django.template import VariableDoesNotExist

template_str = "<h2>{{ article.title }}</h2>"
template = Template(template_str)

# Передаем контекст с пустым словарем
context = Context({})

try:
  res = template.render(context)
  print(res)
except VariableDoesNotExist as e:
  print(f"Handled: {e}")

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

python"Handled: Variable 'article' does not exist"

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

  • исключение TemplateSyntaxError,
    которое является базовым для ошибок синтаксиса шаблонов
  • исключение TemplateDoesNotExist,
    которое возникает при отсутствии файла шаблона
  • исключение ImproperlyConfigured,
    которое указывает на неправильную конфигурацию проекта
  • исключение BadSignature,
    которое возникает при неверной цифровой подписи