- Исправлено 'плавающее' меню (дублирование кнопок при навигации)
- Создан base.html - единый базовый шаблон для всех страниц
- Добавлена кнопка '📅 Запланированные посты' во все 11 страниц
- Sticky sidebar с улучшенным дизайном
- Все страницы теперь имеют одинаковое меню (11 кнопок)
- Улучшенная подсветка активного пункта (border-left)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Скрипт обновления всех шаблонов для использования base.html
|
|
"""
|
|
import re
|
|
import os
|
|
|
|
templates_dir = 'web/templates'
|
|
|
|
# Карта соответствия страниц блокам активного меню
|
|
nav_map = {
|
|
'dashboard.html': 'nav_dashboard',
|
|
'users.html': 'nav_users',
|
|
'verification.html': 'nav_verification',
|
|
'phones.html': 'nav_phones',
|
|
'broadcast.html': 'nav_broadcast',
|
|
'scheduled_posts.html': 'nav_scheduled_posts',
|
|
'polls.html': 'nav_polls',
|
|
'events.html': 'nav_events',
|
|
'schedules.html': 'nav_schedules',
|
|
'ads.html': 'nav_ads',
|
|
'export.html': 'nav_export',
|
|
}
|
|
|
|
def update_template(template_name):
|
|
"""Обновить один шаблон"""
|
|
filepath = os.path.join(templates_dir, template_name)
|
|
|
|
if not os.path.exists(filepath):
|
|
print(f"⚠️ {template_name} - не найден")
|
|
return False
|
|
|
|
with open(filepath, 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
|
|
# Проверяем уже ли обновлён
|
|
if 'extends "base.html"' in content:
|
|
print(f"✅ {template_name} - уже обновлён")
|
|
return True
|
|
|
|
# Определяем блок активного меню
|
|
active_block = nav_map.get(template_name, '')
|
|
|
|
# Извлекаем контент между sidebar закрывающим тегом и концом файла
|
|
# Находим где начинается основной контент
|
|
match = re.search(r'<!-- Main Content -->\s*<div class="col-md-10 content">(.*?)</div>\s*</div>\s*</div>\s*</body>\s*</html>', content, re.DOTALL)
|
|
|
|
if not match:
|
|
print(f"❌ {template_name} - не удалось найти контент")
|
|
return False
|
|
|
|
main_content = match.group(1)
|
|
|
|
# Извлекаем title
|
|
title_match = re.search(r'<title>(.*?)</title>', content)
|
|
title = title_match.group(1) if title_match else 'Домовой Бот'
|
|
|
|
# Создаём новый контент
|
|
active_decl = f'{{% block {active_block} %}}active{{% endblock %}}' if active_block else ''
|
|
|
|
new_content = f'''{{% extends "base.html" %}}
|
|
|
|
{{% block title %}}{title}{{% endblock %}}
|
|
|
|
{active_decl}
|
|
|
|
{{% block content %}}{main_content}
|
|
{{% endblock %}}
|
|
'''
|
|
|
|
with open(filepath, 'w', encoding='utf-8') as f:
|
|
f.write(new_content)
|
|
|
|
print(f"✅ {template_name} - обновлён")
|
|
return True
|
|
|
|
# Обновляем все шаблоны
|
|
print("🔄 Обновление шаблонов...")
|
|
updated = 0
|
|
for template in nav_map.keys():
|
|
if update_template(template):
|
|
updated += 1
|
|
|
|
print(f"\n✅ Обновлено {updated} шаблонов")
|