--- url: /templates/beginners/mistakes.md description: >- Самые частые ошибки в шаблонах и как их исправить — незакрытые теги, кавычки, скобки, приоритет операторов. --- # Частые ошибки
Почти все проблемы с шаблонами — это одни и те же десять ошибок. Если шаблон не работает, пройдитесь по этому списку.
## Бот печатает скобки как текст { #single-brace } **Что видно:** в сообщении написано `{ member.name }` вместо имени. **Причина:** одинарные скобки вместо двойных. Бот подставляет данные только внутри `{{ }}`. ```template Привет, { member.name }! ← неправильно Привет, {{ member.name }}! ← правильно ``` ## Не закрыт тег { #unclosed } **Что видно:** ошибка `unclosed_tag` или `unexpected_eof` («шаблон закончился раньше времени»). **Причина:** у `{% if %}` нет `{% endif %}`, у `{% for %}` нет `{% endfor %}`. ```template {% if member.isPremium %}Спасибо! ← нет endif {% if member.isPremium %}Спасибо!{% endif %} ← правильно ``` У каждого открывающего тега должен быть свой закрывающий: `if` → `endif`, `for` → `endfor`, `macro` → `endmacro`, `filter` → `endfilter`. ## Текст без кавычек { #quotes } **Что видно:** условие никогда не срабатывает, или ошибка `unexpected_token`. **Причина:** текст для сравнения написан без кавычек. Без кавычек бот считает слово названием переменной. ```template {% if member.language == ru %} ← бот ищет переменную ru {% if member.language == 'ru' %} ← правильно ``` ## «Умные» кавычки { #smart-quotes } **Что видно:** ошибка `unexpected_token`, хотя все написано правильно. **Причина:** шаблон скопирован из Word, Google Docs или заметок телефона, и прямые кавычки `'` `"` заменились на типографские: `‘ ’`, `“ ”`, `« »`. Бот понимает только прямые кавычки. ```template {% do url_button(«Правила», «https://…») %} ← «елочки» не подходят {% do url_button('Правила', 'https://…') %} ← правильно ``` Пишите шаблоны прямо в редакторе панели — он таких замен не делает. ## Большие буквы в названиях { #case } **Что видно:** на месте переменной пусто. **Причина:** названия переменных чувствительны к регистру. `Member.Name` и `member.name` — разные вещи, а существует только второе. ```template {{ Member.Name }} ← пусто {{ member.name }} ← правильно ``` ## Сравнение одним знаком «=» { #single-equals } **Что видно:** ошибка в условии. **Причина:** для сравнения нужны два знака: `==`. Один знак `=` — это «запомнить» в теге `set`. ```template {% if member.rank.level = 10 %} ← неправильно {% if member.rank.level == 10 %} ← правильно ``` ## Вертикальная черта в сравнении { #pipe } **Что видно:** условие работает странно. **Причина:** вертикальная черта `|` выполняется **после** сравнения. Запись `members | length < 10` бот читает как `members | (length < 10)`. ```template {% if club.members | length < 10 %} ← неправильно {% if (club.members | length) < 10 %} ← правильно ``` Если в условии есть `|`, заключайте эту часть в скобки. Редактор предупредит об этом. ## `and` и `or` без скобок { #logic } **Что видно:** условие срабатывает не тогда, когда нужно. **Причина:** `and` и `or` в шаблонах равноправны и выполняются слева направо. Запись `a or b and c` значит `(a or b) and c`, а не «a, или b и c вместе». ```template {% if member.isAdmin or member.isOwner and member.isPremium %} ← непонятно {% if member.isAdmin or (member.isOwner and member.isPremium) %} ← понятно ``` ## Лишние пустые строки { #blank-lines } **Что видно:** в сообщении большие пустые промежутки. **Причина:** строки, где стоят только теги, превращаются в пустые строки. Добавьте дефис: `{%-` убирает пробелы и переносы перед тегом, `-%}` — после. ```template {%- if member.isPremium -%} ⭐ Premium {%- endif -%} ``` ## Сообщение не отправилось { #empty-result } **Что видно:** команда сработала, но бот ничего не написал. **Причина:** шаблон дал пустой результат — например, весь текст оказался внутри условия, которое не выполнилось. Пустые сообщения бот не отправляет. Добавьте ветку `{% else %}` с запасным текстом. ## Два подчеркивания не подчеркивают { #underline } **Что видно:** вместо подчеркнутого текста — жирный. **Причина:** в Telegram `__текст__` означает **жирный**. Для подчеркивания пишите `текст`. ## Переменная внутри ссылки или таблицы { #markdown-context } **Что видно:** предупреждение `markdown_context_escape`, ссылка или таблица иногда ломаются. **Причина:** значение из переменной может содержать символы разметки — скобки, черты, звездочки. Внутри `[текст](ссылка)` и строк таблицы это ломает разметку. ```template [Профиль]({{ url }}) ← может сломаться {{ link('Профиль', url) }} ← правильно ``` Для таблиц используйте функцию [`table`](../advanced/functions#table). ## Все равно не работает? { #still } 1. Посмотрите на подчеркнутые места в редакторе и на текст ошибки — там указана строка и столбец. 2. Найдите код ошибки в статье [Ошибки](../advanced/errors) — там описано, что делать. 3. Отправьте тест себе в ЛС и посмотрите, что получилось на самом деле. 4. Нажмите «Скопировать страницу» ниже и спросите ИИ: вставьте в чат свой шаблон и опишите, что не так.