misc: use full URLs for href/src attributes in 404 skeleton pages (#45895)
This commit is contained in:
parent
1aa02b0fb4
commit
e38254d47d
|
@ -1056,7 +1056,7 @@ class TextCell(CellBase):
|
||||||
def get_cell_extra_context(self, context):
|
def get_cell_extra_context(self, context):
|
||||||
extra_context = super(TextCell, self).get_cell_extra_context(context)
|
extra_context = super(TextCell, self).get_cell_extra_context(context)
|
||||||
text = self.text or ''
|
text = self.text or ''
|
||||||
render_skeleton = context.get('render_skeleton')
|
force_absolute_url = context.get('force_absolute_url') or context.get('render_skeleton')
|
||||||
|
|
||||||
def sub_variadic_url(match):
|
def sub_variadic_url(match):
|
||||||
attribute = match.group(1)
|
attribute = match.group(1)
|
||||||
|
@ -1069,7 +1069,7 @@ class TextCell(CellBase):
|
||||||
return '%s="%s"' % (attribute, url)
|
return '%s="%s"' % (attribute, url)
|
||||||
text = re.sub(r'(href|src)="(.*?)"', sub_variadic_url, text)
|
text = re.sub(r'(href|src)="(.*?)"', sub_variadic_url, text)
|
||||||
|
|
||||||
if render_skeleton:
|
if force_absolute_url:
|
||||||
request = context.get('request')
|
request = context.get('request')
|
||||||
def sub_src(match):
|
def sub_src(match):
|
||||||
url = request.build_absolute_uri(match.group(1))
|
url = request.build_absolute_uri(match.group(1))
|
||||||
|
@ -1214,7 +1214,7 @@ class LinkCell(CellBase):
|
||||||
return url
|
return url
|
||||||
|
|
||||||
def get_cell_extra_context(self, context):
|
def get_cell_extra_context(self, context):
|
||||||
render_skeleton = context.get('render_skeleton')
|
force_absolute_url = context.get('force_absolute_url') or context.get('render_skeleton')
|
||||||
request = context.get('request')
|
request = context.get('request')
|
||||||
extra_context = super(LinkCell, self).get_cell_extra_context(context)
|
extra_context = super(LinkCell, self).get_cell_extra_context(context)
|
||||||
if self.link_page:
|
if self.link_page:
|
||||||
|
@ -1222,7 +1222,7 @@ class LinkCell(CellBase):
|
||||||
else:
|
else:
|
||||||
extra_context['title'] = self.title or self.url
|
extra_context['title'] = self.title or self.url
|
||||||
url = self.get_url(context)
|
url = self.get_url(context)
|
||||||
if render_skeleton and not urlparse.urlparse(url).netloc:
|
if force_absolute_url and not urlparse.urlparse(url).netloc:
|
||||||
# create full URL when used in a skeleton
|
# create full URL when used in a skeleton
|
||||||
url = request.build_absolute_uri(url)
|
url = request.build_absolute_uri(url)
|
||||||
extra_context['url'] = url
|
extra_context['url'] = url
|
||||||
|
|
|
@ -240,7 +240,10 @@ def skeleton(request):
|
||||||
source = request.GET['source']
|
source = request.GET['source']
|
||||||
|
|
||||||
if source == '404':
|
if source == '404':
|
||||||
request.extra_context_data = {'site_base': request.build_absolute_uri('/')[:-1]}
|
request.extra_context_data = {
|
||||||
|
'site_base': request.build_absolute_uri('/')[:-1],
|
||||||
|
'force_absolute_url': True,
|
||||||
|
}
|
||||||
response = error404(request, exception=Http404())
|
response = error404(request, exception=Http404())
|
||||||
response.status_code = 200
|
response.status_code = 200
|
||||||
return response
|
return response
|
||||||
|
@ -324,6 +327,7 @@ def skeleton(request):
|
||||||
'pages': pages,
|
'pages': pages,
|
||||||
'request': request,
|
'request': request,
|
||||||
'render_skeleton': True,
|
'render_skeleton': True,
|
||||||
|
'force_absolute_url': True,
|
||||||
'check_badges': should_check_badges(),
|
'check_badges': should_check_badges(),
|
||||||
'site_base': request.build_absolute_uri('/')[:-1],
|
'site_base': request.build_absolute_uri('/')[:-1],
|
||||||
}
|
}
|
||||||
|
|
|
@ -366,6 +366,10 @@ def test_page_skeleton(app):
|
||||||
resp = app.get('/__skeleton__/?source=404')
|
resp = app.get('/__skeleton__/?source=404')
|
||||||
assert "This page doesn't exist" in resp.text
|
assert "This page doesn't exist" in resp.text
|
||||||
assert resp.status_code == 200
|
assert resp.status_code == 200
|
||||||
|
assert 'href="http://testserver/test/foobar"' in resp.text
|
||||||
|
assert 'href="http://www.example.com/test"' in resp.text
|
||||||
|
assert 'href="#top"' in resp.text
|
||||||
|
assert 'href="http://testserver/plop/"' in resp.text
|
||||||
|
|
||||||
# do not consider empty redirection
|
# do not consider empty redirection
|
||||||
Page.objects.all().delete()
|
Page.objects.all().delete()
|
||||||
|
|
Loading…
Reference in New Issue