0 Tage Serie
python / expert
Snippet

Django Benutzerdefinierte Template Tags und Filter mit Inclusion Tags

Djangos Template-System ermöglicht benutzerdefinierte Template Tags und Filter zur Erweiterung seiner Fähigkeiten. Benutzerdefinierte Filter transformieren Template-Variablen vor dem Rendern mit dem @register.filter Dekorator. Inclusion Tags rendern Template-Partials mit Kontextdaten mit @register.inclusion_tag für wiederverwendbare Komponenten wie Pagination. Simple Tags stellen Utility-Funktionen bereit, die überall in Templates mit @register.simple_tag zugänglich sind. Alle benutzerdefinierten Tags müssen in Templates via {% load custom_tags %} geladen werden.

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
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.filter(name='truncate_words_middle')
def truncate_words_middle(text, num_words):
words = text.split()
if len(words) <= num_words:
return text
start = words[:num_words//2]
end = words[-num_words//2:]
return ' '.join(start) + '...' + ' '.join(end)
@register.inclusion_tag('components/pagination.html')
def render_pagination(page_obj, request_get_param='page'):
return {
'page_obj': page_obj,
'request_get_param': request_get_param
}
@register.simple_tag
def get_range(start, end, step=1):
return list(range(start, end, step))
django
Erklärung
1
from django.utils.safestring import mark_safe
Importiert mark_safe um HTML-Inhalt zurückzugeben der nicht escaped werden soll
2
@register.filter(name='truncate_words_middle')
Dekorator registriert benutzerdefinierten Filter mit optionalem benutzerdefinierten Namen
3
words = text.split()
Teilt Text in Wörter um Middle-Truncation-Logik zu ermöglichen
4
start = words[:num_words//2]
Nimmt erste Hälfte der Wörter für Truncation-Start-Segment
5
@register.inclusion_tag('components/pagination.html')
Dekorator gibt Template-Datei an die mit zurückgegebenem Kontext gerendert werden soll
6
@register.simple_tag
Dekorator registriert Tag ohne Template, gibt Wert direkt zurück