0 Tage Serie
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
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
26
27
28
29
from django import template
from django.utils.html import format_html
from ..models import Category
register = template.Library()
@register.filter(name='truncate_chars')
def truncate_chars(text, length):
if len(text) <= length:
return text
return 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