Markdown Web: Statische Seiten aus Markdown generieren
Blog, Dokumentation & Wiki — kein CMS, kein WordPress, pure Geschwindigkeit
Python
Markdown
Jinja2
HTML
📝 Markdown schreiben. HTML bekommen. Fertig.
🌐 Warum ein Static-Site-Generator?
WordPress & Co. sind overkill für viele Projekte. Sicherheitslücken, Updates, langsame Ladezeiten. Statische HTML-Seiten sind unschlagbar schnell, sicher und benötigen keinen Datenbank-Server. Markdown Web generiert sie automatisch aus Ihren Markdown-Dateien.
Extrem schnell
Generierung von 100 Seiten in unter 2 Sekunden. Ladezeiten < 100ms — kein DB-Overhead.
Sicher
Kein Login, keine Datenbank, keine Injection-Angriffsfläche. Statisches HTML ist inhärent sicher.
Markdown-First
Schreiben im vertrauten Markdown-Format. Einfach, versionierbar (Git), überall editierbar.
Templates
Jinja2-Templates für vollständige Design-Freiheit. Eigene Themes in Minuten erstellt.
🏗️ Komponenten
📄 Markdown-Parser
Erweiterter Markdown: Tables, Code-Highlighting, Task-Lists, Footnotes. YAML-Frontmatter.
📋 Blog-Engine
Chronologische Posts, Tags, Kategorien, RSS-Feed. Automatische Index-Seiten.
📚 Dokumentation
Navigation aus Ordnerstruktur. Automatische Sidebar, Breadcrumbs, Suche.
🔍 Volltextsuche
Client-seitige Suche mit Lunr.js-Index. Kein Server nötig. Funktioniert offline.
👁️ Live-Vorschau
Lokaler Dev-Server mit Hot-Reload. Änderung speichern → Browser aktualisiert automatisch.
🚀 Deployment
FTP/SFTP-Upload, GitHub Pages, Netlify — ein Befehl. CI/CD-Integration möglich.
💻 Der Generator-Kern
import markdown
import frontmatter
from jinja2 import Environment, FileSystemLoader
from pathlib import Path
class SiteGenerator:
"""Generiert statische HTML-Seiten aus Markdown."""
def __init__(self, content_dir: str, template_dir: str, output_dir: str):
self.content_dir = Path(content_dir)
self.output_dir = Path(output_dir)
self.env = Environment(loader=FileSystemLoader(template_dir))
self.md = markdown.Markdown(extensions=[
'meta', 'toc', 'tables', 'fenced_code',
'codehilite', 'footnotes', 'attr_list'
])
self.pages = []
self.posts = []
self.tags = {}
def build(self):
"""Komplette Seite generieren."""
self._collect_content()
self._generate_pages()
self._generate_indexes()
self._generate_rss()
self._copy_static_files()
print(f"✅ {len(self.pages)} Seiten generiert in {self.output_dir}")
def _collect_content(self):
"""Sammelt und parst alle Markdown-Dateien."""
for md_file in self.content_dir.rglob('*.md'):
post = frontmatter.load(md_file)
page = {
'title': post.get('title', md_file.stem),
'date': post.get('date'),
'tags': post.get('tags', []),
'template': post.get('template', 'page.html'),
'content': self.md.convert(post.content),
'url': str(md_file.relative_to(self.content_dir)).replace('.md', '.html')
}
self.pages.append(page)
if post.get('date'):
self.posts.append(page)
def _generate_pages(self):
"""Generiert HTML für jede Seite."""
for page in self.pages:
template = self.env.get_template(page['template'])
html = template.render(
page=page,
pages=self.pages,
posts=sorted(self.posts, key=lambda x: x['date'], reverse=True),
tags=self.tags
)
out_path = self.output_dir / page['url']
out_path.parent.mkdir(parents=True, exist_ok=True)
out_path.write_text(html, encoding='utf-8')
⚡ 100 Seiten in 2 Sekunden — keine Datenbank, kein PHP.
Blog, Docs oder Wiki — statisch & schnell.
Wir konfigurieren Ihren Static-Site-Generator und das passende Deployment.
Beratung
Ist ein Static-Site-Generator das Richtige für Ihr Projekt? Wir analysieren es.
Theme-Design
Template-Erstellung nach Ihrem Design. Responsiv, barrierefrei, schnell.
Setup & Deploy
Generator konfigurieren + Deployment einrichten. In 1–2 Tagen live.