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
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 templatefrom django.utils.safestring import mark_saferegister = template.Library()@register.filter(name='truncate_words_middle')def truncate_words_middle(text, num_words):words = text.split()if len(words) <= num_words:return textstart = 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_tagdef 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