Вместо этого вы можете использовать лексер движка шаблонов (код nj: django 1.11, возможно, потребуется адаптировать его, если вы используете django 2.x):
from django.template import base
lexer = base.Lexer("{{ var_one }} is one {% if var_two %}{{ var_two|upper }} is two {% endif %}")
tokens = lexer.tokenize()
for t in tokens:
if t.token_type == base.TOKEN_VAR:
print("{}: {}".format(t, t.contents)
Я предоставляю вам право прочитать код template.base, чтобы узнать другие полезные функции ...
Также в вашем методе проверки вы определенно хотите отлавливать ВСЕ ошибки сразу (вместо того, чтобы вызывать их, как только вы нашли ошибку), чтобы пользователь мог исправить все ошибки сразу (если вы действительно не хотите сводить с ума своих пользователей, что есть).
И, наконец, как предлагает Гасанов в своем ответе, вы также хотите использовать наборы, чтобы найти как пропущенные, так и недопустимые переменные - это гораздо эффективнее, чем последовательный поиск.