diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 90541bc3ce046d672e6042648e0998421c8218b3..5a8c03cda00b7b6853e29a4503d0ed4344a37da1 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -43,6 +43,7 @@ Fixed * Progress page didn't show error message on failure. * Dynamic routes were not removed/hid when the respective object registering it was deleted. * Django messages were not displayed in Vue frontend. +* Links to data check objects did not work properly. `3.0b3`_ - 2023-03-19 --------------------- diff --git a/aleksis/core/templates/core/data_check/list.html b/aleksis/core/templates/core/data_check/list.html index b192dcdc1623a05fa3ad7b3568b4b8bdc3622abf..00b0ceb3a9eefdb473b6fe97a2d2d693aee59b61 100644 --- a/aleksis/core/templates/core/data_check/list.html +++ b/aleksis/core/templates/core/data_check/list.html @@ -2,6 +2,7 @@ {% extends "core/base.html" %} {% load data_helpers %} +{% load html_helpers %} {% load i18n %} {% load render_table from django_tables2 %} @@ -59,9 +60,11 @@ <td>{{ result.related_object }}</td> <td>{{ result.related_check.problem_name }}</td> <td> - <a class="btn-flat waves-effect waves-light" href="{{ result.related_object.get_absolute_url }}"> + {% if result.related_object.get_absolute_url %} + <a class="btn-flat waves-effect waves-light" href="{{ result.related_object.get_absolute_url|remove_prefix:"/django/" }}" target="_blank"> {% trans "Show object" %} </a> + {% endif %} </td> <td> {% for option_name, option in result.related_check.solve_options.items %} diff --git a/aleksis/core/templatetags/html_helpers.py b/aleksis/core/templatetags/html_helpers.py index 8ca5be151d2edc39bf6787e9e51eabb3350714a0..98608a084574994400bffe46c50f944b52296e24 100644 --- a/aleksis/core/templatetags/html_helpers.py +++ b/aleksis/core/templatetags/html_helpers.py @@ -1,5 +1,6 @@ import random import string +from urllib.parse import urlparse from django import template from django.shortcuts import reverse @@ -28,6 +29,24 @@ def add_class_to_el(value: str, arg: str) -> str: return str(soup) +@register.filter +def remove_prefix(value: str, prefix: str) -> str: + """Remove prefix of a url. + + :Example: + + .. code-block:: + + {{ object.get_absolute_url|remove_prefix: "/django/" }} + """ + url = urlparse(value) + + if url.path.startswith(prefix): + url = url._replace(path=url.path[len(prefix) :]) + + return url.geturl() + + @register.simple_tag def generate_random_id(prefix: str, length: int = 10) -> str: """Generate a random ID for templates.