python / intermediate
Snippet
Django Eigene Template-Tags und Filter
Djangos Templatesystem erlaubt benutzerdefinierte Template-Tags und Filter durch einen Registrierungsmechanismus. Einfache Filter mit @register.filter transformieren Inhaltsdarstellung (wie Markdown zu HTML) und müssen sichere Strings mit mark_safe zurückgeben, um XSS zu verhindern. Simple Tags mit @register.simple_tag bieten mehr Flexibilität für komplexe Ausgabe oder Zugriff auf mehrere Variablen. Inclusion-Tags mit @register.inclusion_tag rendern ein vollständiges Template-Fragment mit übergebenem Kontext, perfekt für wiederverwendbare UI-Komponenten wie Badges oder Karten. Alle benutzerdefinierten Tags leben in einem 'templatetags'-Verzeichnis, das in INSTALLED_APPS sein muss.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# myapp/templatetags/extras.pyfrom django import templatefrom django.utils.safestring import mark_safeimport markdownregister = template.Library()@register.filter(name='markdown')def markdown_filter(text):return mark_safe(markdown.markdown(text))@register.simple_tagdef user_status(user, mode='short'):if mode == 'full':return f"{user.username} ({user.get_role_display()})"return user.username@register.inclusion_tag('parts/badge.html')def render_badge(label, count, color='primary'):return {'label': label, 'count': count, 'color': color}# Usage in template:# {{ post.content|markdown }}# {% user_status request.user 'full' %}# {% render_badge 'Notifications' notification_count %}
django
Erklärung
1
@register.filter(name='markdown')
Decorator registriert eine Filterfunktion, die mit Pipe-Operator in Templates verwendbar ist
2
mark_safe(markdown.markdown(text))
Markiert Ausgabe als sicheres HTML - vorsichtig verwenden um XSS-Schwachstellen zu vermeiden
3
@register.inclusion_tag('parts/badge.html')
Rendert angegebenes Template mit zurückgegebenem Dictionary als Kontextvariablen