Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/django/contrib/admin/templatetags/admin_urls.py: 25%
40 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1from urllib.parse import parse_qsl, unquote, urlparse, urlunparse
3from django import template
4from django.contrib.admin.utils import quote
5from django.urls import Resolver404, get_script_prefix, resolve
6from django.utils.http import urlencode
8register = template.Library()
11@register.filter
12def admin_urlname(value, arg):
13 return "admin:%s_%s_%s" % (value.app_label, value.model_name, arg)
16@register.filter
17def admin_urlquote(value):
18 return quote(value)
21@register.simple_tag(takes_context=True)
22def add_preserved_filters(context, url, popup=False, to_field=None):
23 opts = context.get("opts")
24 preserved_filters = context.get("preserved_filters")
26 parsed_url = list(urlparse(url))
27 parsed_qs = dict(parse_qsl(parsed_url[4]))
28 merged_qs = {}
30 if opts and preserved_filters:
31 preserved_filters = dict(parse_qsl(preserved_filters))
33 match_url = "/%s" % unquote(url).partition(get_script_prefix())[2]
34 try:
35 match = resolve(match_url)
36 except Resolver404:
37 pass
38 else:
39 current_url = "%s:%s" % (match.app_name, match.url_name)
40 changelist_url = "admin:%s_%s_changelist" % (
41 opts.app_label,
42 opts.model_name,
43 )
44 if (
45 changelist_url == current_url
46 and "_changelist_filters" in preserved_filters
47 ):
48 preserved_filters = dict(
49 parse_qsl(preserved_filters["_changelist_filters"])
50 )
52 merged_qs.update(preserved_filters)
54 if popup:
55 from django.contrib.admin.options import IS_POPUP_VAR
57 merged_qs[IS_POPUP_VAR] = 1
58 if to_field:
59 from django.contrib.admin.options import TO_FIELD_VAR
61 merged_qs[TO_FIELD_VAR] = to_field
63 merged_qs.update(parsed_qs)
65 parsed_url[4] = urlencode(merged_qs)
66 return urlunparse(parsed_url)