feat: integriertes Dokumentations-Wiki für NetBox hinzufügen

- Markdown-Dokumentationen direkt in NetBox erstellen
- Dokumente Standorten, Racks, Geräten, VMs und Clustern zuordnen
- DOCX-, XLSX-, PDF-, Markdown- und Textimporte unterstützen
- REST-API, Suche, Berechtigungen und Änderungsprotokoll ergänzen
- Installation, Konfiguration und Importgrenzen dokumentieren
This commit is contained in:
2026-07-22 10:23:58 +02:00
commit ab0ed26ad3
24 changed files with 764 additions and 0 deletions
@@ -0,0 +1,19 @@
{% extends 'generic/object.html' %}
{% load helpers %}
{% block content %}
<div class="row">
<div class="col col-md-9">
{% if object.summary %}<p class="lead">{{ object.summary }}</p>{% endif %}
<div class="card"><div class="card-body rendered-markdown">{{ object.body|render_markdown }}</div></div>
</div>
<div class="col col-md-3">
<div class="card"><h5 class="card-header">Zuordnungen</h5><div class="list-group list-group-flush">
{% for assignment in object.assignments.all %}<a class="list-group-item" href="{{ assignment.assigned_object.get_absolute_url }}">{{ assignment.assigned_object_type }}: {{ assignment.assigned_object }}</a>{% empty %}<div class="list-group-item text-muted">Noch nicht zugeordnet</div>{% endfor %}
</div></div>
{% if object.attachments.all %}<div class="card mt-3"><h5 class="card-header">Originaldateien</h5><div class="list-group list-group-flush">
{% for attachment in object.attachments.all %}<a class="list-group-item" href="{{ attachment.file.url }}">{{ attachment.original_name }}</a>{% endfor %}
</div></div>{% endif %}
</div>
</div>
{% endblock content %}
@@ -0,0 +1,13 @@
{% extends 'base/layout.html' %}
{% load form_helpers %}
{% block title %}Dokument importieren{% endblock %}
{% block content %}
<div class="row justify-content-center"><div class="col col-md-8"><div class="card">
<h5 class="card-header">Word, Excel oder PDF importieren</h5>
<div class="card-body"><form method="post" enctype="multipart/form-data">{% csrf_token %}{% render_form form %}
<div class="text-muted mb-3">DOCX übernimmt Überschriften, Listen und Tabellen. XLSX wird je Tabellenblatt zu einer Markdown-Tabelle. PDF benötigt eine echte Textebene; Scan-OCR ist nicht enthalten.</div>
<button type="submit" class="btn btn-primary">Importieren</button>
</form></div>
</div></div></div>
{% endblock %}
@@ -0,0 +1,11 @@
<div class="card">
<h5 class="card-header"><i class="mdi mdi-book-open-page-variant"></i> Dokumentation</h5>
<div class="list-group list-group-flush">
{% for assignment in documentation_assignments %}
<a class="list-group-item list-group-item-action" href="{{ assignment.document.get_absolute_url }}">
<strong>{{ assignment.document.title }}</strong>{% if assignment.note %}<br><small>{{ assignment.note }}</small>{% endif %}
</a>
{% empty %}<div class="list-group-item text-muted">Keine Dokumentation zugeordnet.</div>{% endfor %}
</div>
{% if perms.netbox_documentation.add_documentassignment %}<div class="card-footer"><a href="{% url 'plugins:netbox_documentation:documentassignment_add' %}?assigned_object_type={{ content_type.pk }}&assigned_object_id={{ object.pk }}" class="btn btn-sm btn-primary"><i class="mdi mdi-link-plus"></i> Zuordnen</a></div>{% endif %}
</div>