Django - Quick Tips - Templatetags

🕓 · ☕1

Django - Quick Tips

Rozpoczynam nową serię z drobnymi poradami dotyczącymi Django.
Na początek serii napiszę i omówię dość przydatny templatetag, który ułatwi pracę z paginacją i różnym filtrowaniem/sortowaniem na stronie.

Problem

Na stronie masz paginator, a także sortowanie, bądź filtrowanie treści.
Klikasz, by filtrować treść i chcesz przejść na kolejną stronę, a tu… jesteś co prawda na kolejnej stronie, ale bez wybranego filtrowania.

Template Tag

Przygotowanie

W folderze aplikacji django, gdzie są pliki m.in. views.py, models.py tworzymy moduł, czyli tworzymy folder templatetags a w nim plik __init__.py, oraz url_tag.py.

Edycja url_tag.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from django import template
register = template.Library()


@register.simple_tag(takes_context=True)
def url_add(context, **kwargs):
    request = context.get('request')
    get = request.GET.copy()
    for kwarg in kwargs:
        get.pop(kwarg, None)
    get.update(kwargs)
    path = f"{request.path}?"
    path += get.urlencode()
    return path

Użycie tagu

By użyć tagu {% url_add %}, musimy go zarejestrować na początku templatu

{% load url_tag %}

Następnie w przypadku paginacji zamiast:

1
<a href="{% url_add page=i %}"

wstawiamy:

1
<a href="{% url_add page=i %}"

Jeśli chcemy powiązać tag z formularzem, by np. łączyć zapytania z filtrowaniem, bądź sortowaniem, to podajemy tag w form action:

1
<form action="{% url_add %}"

Dzięki temu adres url może wyglądać następująco:

https://moja-strona.pl/news/?category=3&category=4&page=2

Robert Lewandowski
Robert Lewandowski
Problem Solver Developer