Обновить build.py

This commit is contained in:
masterpmi 2026-07-23 10:18:43 +03:00
parent 4ab60a6622
commit 740c6afe4a

View File

@ -1,5 +1,6 @@
import os
import markdown
import shutil
from pathlib import Path
TEMPLATE = """<!DOCTYPE html>
@ -22,7 +23,11 @@ TEMPLATE = """<!DOCTYPE html>
nav a:hover {{ text-decoration: underline; }}
.person {{ margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px dashed #ddd; }}
.person-name {{ font-weight: bold; font-size: 1.1em; color: #222; }}
.person-name a {{ color: #003366; text-decoration: none; }}
.person-name a:hover {{ text-decoration: underline; }}
.person-details {{ color: #555; font-size: 0.95em; }}
.back-link {{ display: inline-block; margin-bottom: 20px; color: #003366; text-decoration: none; }}
.back-link:hover {{ text-decoration: underline; }}
</style>
</head>
<body>
@ -81,7 +86,7 @@ def main():
for md_file in news_files:
build_page(md_file, Path(f'public/news/{md_file.stem}.html'), md_file.stem.replace('-', ' ').title())
# 3. Страница сотрудников (с группировкой!)
# 3. Страница сотрудников (с группировкой и ссылками!)
staff_by_lab = {}
unassigned = []
@ -99,7 +104,11 @@ def main():
if position: details.append(position)
details_str = ", ".join(details)
person_html = f'<div class="person"><div class="person-name">{name}</div><div class="person-details">{details_str}</div></div>'
# Создаем ссылку на персональную страницу
person_html = f'''<div class="person">
<div class="person-name"><a href="staff/{md_file.stem}.html">{name}</a></div>
<div class="person-details">{details_str}</div>
</div>'''
if lab == 'Без подразделения' or not lab:
unassigned.append(person_html)
@ -111,7 +120,6 @@ def main():
# Формируем HTML для страницы сотрудников
staff_html = "<h2>Наши сотрудники</h2>"
# Сначала лаборатории в заданном порядке (можно отсортировать)
lab_order = [
"Лаборатория математики и телекоммуникаций",
"Лаборатория теоретической и вычислительной физики",
@ -124,7 +132,6 @@ def main():
for p in staff_by_lab[lab]:
staff_html += p
# Остальные лаборатории (если появятся новые)
for lab, people in staff_by_lab.items():
if lab not in lab_order:
staff_html += f"<h3>{lab}</h3>"
@ -139,18 +146,27 @@ def main():
with open('public/staff.html', 'w', encoding='utf-8') as f:
f.write(TEMPLATE.format(title="Сотрудники", content=staff_html))
# Создаем индивидуальные страницы для каждого сотрудника
# 4. Создаем индивидуальные страницы для каждого сотрудника
for md_file in Path('content/staff').glob('*.md'):
build_page(md_file, Path(f'public/staff/{md_file.stem}.html'), meta.get('name', md_file.stem))
# 4. Копирование статических файлов (картинки, CSS и т.д.)
with open(md_file, 'r', encoding='utf-8') as f:
meta, body = parse_front_matter(f.read())
name = meta.get('name', md_file.stem.replace('-', ' ').title())
# Добавляем ссылку "Назад к списку" в начало страницы
full_content = f'<a href="/staff.html" class="back-link">← Назад к списку сотрудников</a>\n{body}'
html_content = markdown.markdown(full_content, extensions=['fenced_code', 'tables'])
with open(Path(f'public/staff/{md_file.stem}.html'), 'w', encoding='utf-8') as f:
f.write(TEMPLATE.format(title=name, content=html_content))
# 5. Копирование статических файлов (картинки)
if Path('static').exists():
import shutil
shutil.rmtree('public/static', ignore_errors=True)
shutil.copytree('static', 'public/static')
print(" Статические файлы скопированы")
print(" Статические файлы скопированы")
print("✅ Сайт успешно собран! Сотрудники сгруппированы.")
print("✅ Сайт успешно собран! Сотрудники сгруппированы и кликабельны.")
if __name__ == '__main__':
main()
main()