misc: directly give redirect url as target if possible (#56308)
This commit is contained in:
parent
5f34c09945
commit
85f3ac7733
|
@ -262,6 +262,10 @@ class Page(models.Model):
|
|||
return list(reversed(pages))
|
||||
|
||||
def get_online_url(self):
|
||||
if self.redirect_url and not (
|
||||
utils.is_templated_url(self.redirect_url) or self.redirect_url.startswith('.')
|
||||
):
|
||||
return self.redirect_url
|
||||
parts = [x.slug for x in self.get_parents_and_self()]
|
||||
if parts[0] == 'index':
|
||||
parts = parts[1:]
|
||||
|
|
|
@ -20,4 +20,4 @@ from .crypto import DecryptionError, aes_hex_decrypt, aes_hex_encrypt
|
|||
from .misc import ellipsize, flatten_context
|
||||
from .requests_wrapper import NothingInCacheException, requests
|
||||
from .signature import check_query, check_request_signature, sign_url
|
||||
from .urls import TemplateError, get_templated_url
|
||||
from .urls import TemplateError, get_templated_url, is_templated_url
|
||||
|
|
|
@ -31,8 +31,12 @@ class TemplateError(Exception):
|
|||
return self.msg % self.params
|
||||
|
||||
|
||||
def is_templated_url(url):
|
||||
return bool('{{' in url or '{%' in url or '[' in url)
|
||||
|
||||
|
||||
def get_templated_url(url, context=None):
|
||||
if '{{' not in url and '{%' not in url and '[' not in url:
|
||||
if not is_templated_url(url):
|
||||
return url
|
||||
template_vars = Context(use_l10n=False)
|
||||
if context:
|
||||
|
|
|
@ -37,6 +37,21 @@ def test_page_url():
|
|||
page2.parent = page
|
||||
assert page2.get_online_url() == '/foo/bar/'
|
||||
|
||||
# directly give redirect url of linked page
|
||||
page2.redirect_url = 'https://www.example.org/test'
|
||||
page2.save()
|
||||
assert page2.get_online_url() == 'https://www.example.org/test'
|
||||
|
||||
# unless it is a relative path
|
||||
page2.redirect_url = '../test'
|
||||
page2.save()
|
||||
assert page2.get_online_url() == '/foo/bar/'
|
||||
|
||||
# or if's a template
|
||||
page2.redirect_url = '{{test_url}}plop'
|
||||
page2.save()
|
||||
assert page2.get_online_url() == '/foo/bar/'
|
||||
|
||||
|
||||
def test_page_of_level():
|
||||
parent_page = None
|
||||
|
|
Loading…
Reference in New Issue