Source code for scipost.templatetags.request_filters

__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"


import re

from django import template
from django.urls import reverse, NoReverseMatch

from urllib.parse import urlencode

from ..utils import build_absolute_uri_using_site

register = template.Library()


[docs]@register.simple_tag(takes_context=True) def full_url(context, view_name, *args, **kwargs): rel_url = reverse(view_name, args=args, kwargs=kwargs) try: return context["request"].build_absolute_uri(rel_url) except KeyError: return build_absolute_uri_using_site(rel_url)
[docs]@register.simple_tag(takes_context=True) def full_url_from_object(context, _object): rel_url = _object.get_absolute_url() try: return context["request"].build_absolute_uri(rel_url) except KeyError: return build_absolute_uri_using_site(rel_url)
[docs]@register.simple_tag(takes_context=True) def url_replace(context, **kwargs): query = context["request"].GET.dict() query.update(kwargs) return urlencode(query)
[docs]@register.simple_tag(takes_context=True) def active(context, pattern_or_urlname): try: pattern = "^" + reverse(pattern_or_urlname) except NoReverseMatch: pattern = pattern_or_urlname path = context["request"].path if re.search(pattern, path): return "active" return ""
[docs]@register.simple_tag(takes_context=True) def active_get_request(context, get_key, get_value): query = context["request"].GET.dict() return "active" if query.get(get_key) == str(get_value) else ""