diff --git a/conservancy/news/templatetags/fill_url.py b/conservancy/news/templatetags/fill_url.py new file mode 100644 index 0000000000000000000000000000000000000000..e23d1c0fb77954af58540e324fcd863c81a794d7 --- /dev/null +++ b/conservancy/news/templatetags/fill_url.py @@ -0,0 +1,20 @@ +import urllib.parse + +from django import template + +register = template.Library() + +@register.filter(name='fill_url') +def fill_url(given_url, base_url): + """"Fill out" missing pieces of one URL from another. + + This function parses the given URL, and if it's missing any pieces + (scheme, netloc, etc.), it fills those in from the base URL. + Typical usage is "/URL/path"|fill_url:"https://hostname/" + to generate "https://hostname/URL/path". + """ + given_parts = urllib.parse.urlsplit(given_url) + base_parts = urllib.parse.urlsplit(base_url) + return urllib.parse.urlunsplit( + given_part or base_part for given_part, base_part in zip(given_parts, base_parts) + )