From fc586273dc1355063f920cfe1566e139b776ccfe Mon Sep 17 00:00:00 2001 From: Valentin Gagarin Date: Wed, 19 Feb 2025 15:40:51 +0100 Subject: [PATCH] implement login URL as templatetag this eases testing as it allows generating that URL inside a test instead of scraping HTML output --- panel/src/panel/templates/base.html | 5 +++-- panel/src/panel/templatetags/__init__.py | 0 panel/src/panel/templatetags/custom_tags.py | 16 ++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 panel/src/panel/templatetags/__init__.py create mode 100644 panel/src/panel/templatetags/custom_tags.py diff --git a/panel/src/panel/templates/base.html b/panel/src/panel/templates/base.html index 86f1557..a068007 100644 --- a/panel/src/panel/templates/base.html +++ b/panel/src/panel/templates/base.html @@ -16,10 +16,11 @@
+ {% load custom_tags %} {% if user.is_authenticated %} -

Welcome, {{ user.username }}! Logout

+

Welcome, {{ user.username }}! Logout

{% else %} -

Login

+

Login

{% endif %}
{% block navigation %} diff --git a/panel/src/panel/templatetags/__init__.py b/panel/src/panel/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/panel/src/panel/templatetags/custom_tags.py b/panel/src/panel/templatetags/custom_tags.py new file mode 100644 index 0000000..563047e --- /dev/null +++ b/panel/src/panel/templatetags/custom_tags.py @@ -0,0 +1,16 @@ +from django import template +from django.urls import reverse +from urllib.parse import urlencode + +register = template.Library() + +@register.simple_tag(takes_context=True) +def auth_url(context, action): + """Generate login/logout URL with current path as redirect.""" + request = context['request'] + view = context.get('view') + redirect_field_name = getattr(view, 'redirect_field_name', 'next') + + base_url = reverse(action) + query_params = {redirect_field_name: request.path} + return f"{base_url}?{urlencode(query_params)}"