diff --git a/plinth/views.py b/plinth/views.py index b8ee67323..be07617a4 100644 --- a/plinth/views.py +++ b/plinth/views.py @@ -4,6 +4,7 @@ Main FreedomBox views. """ import datetime +import random import time import urllib.parse @@ -14,6 +15,7 @@ from django.http import Http404, HttpResponseBadRequest, HttpResponseRedirect from django.shortcuts import redirect from django.template.response import TemplateResponse from django.urls import reverse +from django.utils.html import format_html from django.utils.translation import gettext as _ from django.views.decorators.http import require_POST from django.views.generic import TemplateView @@ -59,6 +61,25 @@ def is_safe_url(url): return True +def messages_error(request, message, exception): + """Show an error message using Django messages framework. + + If an exception can show HTML message, handle is separately. + """ + if hasattr(exception, 'get_html_message'): + collapse_id = 'error-details-' + str(random.randint(0, 10**9)) + message = format_html( + '{message} ' + 'Details
{html_message}',
+ message=message, html_message=exception.get_html_message(),
+ collapse_id=collapse_id)
+
+ messages.error(request, message)
+
+
def _get_redirect_url_from_param(request):
"""Return the redirect URL from 'next' GET/POST param."""
redirect_to = request.GET.get(REDIRECT_FIELD_NAME, '')