python / intermediate
Snippet
Django Template Tags und Filter für dynamisches Rendern
Django Template Tags und Filter erweitern die Template-Sprache um benutzerdefinierte Funktionen. Filter transformieren Variablen vor der Anzeige mit Pipe-Syntax. Simple Tags akzeptieren Kontext und Parameter für wiederverwendbare Snippets. Inclusion Tags rendern spezifische Templates mit zurückgegebenem Kontext, ideal für wiederkehrende Komponenten wie Navigation oder Widget-Bereiche.
snippet.py
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
26
27
28
29
from django import templatefrom django.utils.html import format_htmlfrom ..models import Categoryregister = template.Library()@register.filter(name='truncate_chars')def truncate_chars(text, length):if len(text) <= length:return textreturn text[:length].rsplit(' ', 1)[0] + '...'@register.simple_tag(takes_context=True)def user_profile_link(context, user):if not user.is_authenticated:return format_html('<span class="text-muted">Anonymous</span>')return format_html('<a href="/users/{}" class="profile-link">{}</a>',user.id,user.username)@register.inclusion_tag('categories.html')def render_categories(show_empty=False):categories = Category.objects.all()if not show_empty:categories = categories.filter(article_count__gt=0)return {'categories': categories}
django
Erklärung
1
from django import template
Importiere Template-Bibliothek um benutzerdefinierte Tags und Filter zu registrieren
2
register = template.Library()
Erstelle Library-Instanz um benutzerdefinierte Template-Erweiterungen zu registrieren
3
@register.filter(name='truncate_chars')
Decorator registriert Funktion als Template-Filter, optionaler name-Parameter benennt sie um
4
return text[:length].rsplit(' ', 1)[0] + '...'
Teile von rechts am Leerzeichen um Wörter nicht mitten im Satz abzuschneiden
5
@register.simple_tag(takes_context=True)
Simple Tag kann auf Template-Kontext zugreifen einschließlich Request- und User-Objekt
6
format_html('<a href="/users/{}">{}</a>', ...)
Verwende format_html um Benutzerinhalte sicher zu escapen und XSS-Schwachstellen zu verhindern
7
@register.inclusion_tag('categories.html')
Rendert spezifizierte Template-Datei mit zurückgegebenem Dictionary als Kontext