return user to page they came from on language change

This commit is contained in:
Jenny Danzmayr 2024-09-18 01:51:56 +02:00
parent 4d8cc8b989
commit d49dd06f74
2 changed files with 10 additions and 2 deletions

View file

@ -8,7 +8,7 @@
<form action="{{ request.path }}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{% url 'site.index' %}" />
<input name="next" type="hidden" value="{{ next_url }}" />
{% get_current_language as CURRENT_LANGUAGE %}
{% get_available_languages as LANGUAGES %}
<select name="language">

View file

@ -20,6 +20,7 @@ from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
from django.utils import timezone
from django.utils.html import format_html
from django.utils.http import url_has_allowed_host_and_scheme
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext_lazy
from django.views.decorators.cache import cache_control, never_cache
@ -475,12 +476,19 @@ if settings.METRICS:
def choose_language(request):
next_url = request.GET.get("next", request.META.get("HTTP_REFERER"))
if not url_has_allowed_host_and_scheme(
url=next_url,
allowed_hosts={request.get_host()},
require_https=request.is_secure(),
):
next_url = reverse('site.index')
if request.method == 'POST':
lang_code = request.POST.get(LANGUAGE_QUERY_PARAMETER)
if language_change_counter:
language_change_counter.labels(lang_code).inc()
return set_language(request)
return render(request, 'site/language.html', {})
return render(request, 'site/language.html', {'next_url': next_url})
@never_cache