diff --git a/docs/changelog.rst b/docs/changelog.rst
index 050cc3be8a..f322dc811a 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -41,7 +41,11 @@ In preparation for HD Views developments (PR #3298)
- Check pictogram exist on categories during generation of pdfs
- Fix ApidaeParsers does not update every time
- Add fixtures licenses initial install
+<<<<<<< HEAD
- Fix default conf nginx for mobile
+=======
+- Replace image's relative URLs with absolute URLs in API v2 trek descriptions (#3321)
+>>>>>>> 84e5d741b... :bug: Change for absolute url on trek's description in api v2
2.94.0 (2022-12-12)
diff --git a/geotrek/api/tests/test_v2.py b/geotrek/api/tests/test_v2.py
index b715ce3f72..86245b8912 100644
--- a/geotrek/api/tests/test_v2.py
+++ b/geotrek/api/tests/test_v2.py
@@ -341,7 +341,10 @@ def setUpTestData(cls):
reservation_system=cls.reservation_system,
practice=cls.practice,
difficulty=cls.difficulty,
- accessibility_level=cls.accessibility_level
+ accessibility_level=cls.accessibility_level,
+ description='
Description
'
+ '
'
+ '
'
)
cls.parent.accessibilities.add(cls.accessibility)
cls.parent.source.add(cls.source)
diff --git a/geotrek/api/v2/serializers.py b/geotrek/api/v2/serializers.py
index a27e814f65..e2c0f1728f 100644
--- a/geotrek/api/v2/serializers.py
+++ b/geotrek/api/v2/serializers.py
@@ -1,3 +1,4 @@
+from bs4 import BeautifulSoup
import json
from django.conf import settings
@@ -618,8 +619,29 @@ def get_published(self, obj):
def get_name(self, obj):
return get_translation_or_dict('name', self, obj)
+ def replace_src_absolute(self, data):
+ soup = BeautifulSoup(data, features="lxml")
+ imgs = soup.find_all('img')
+ for img in imgs:
+ if img.attrs['src'][0] == '/':
+ img['src'] = f'{self.context.get("request").build_absolute_uri("/")}{img.attrs["src"]}'
+
def get_description(self, obj):
- return get_translation_or_dict('description', self, obj)
+ lang = self.context.get('request').GET.get('language', 'all') if self.context.get('request') else 'all'
+
+ if lang != 'all':
+ data = getattr(obj, '{}_{}'.format('description', lang))
+ if data:
+ self.replace_src_absolute(data)
+ else:
+ data = {}
+ for language in settings.MODELTRANSLATION_LANGUAGES:
+ data_lang = getattr(obj, '{}_{}'.format('description', language), )
+ if data_lang:
+ self.replace_src_absolute(data_lang)
+ data.update({language: data_lang})
+
+ return data
def get_access(self, obj):
return get_translation_or_dict('access', self, obj)