Fix doubled URLs when |host filter receives absolute URLs
_join_url_parts() only checked the first segment for a scheme, so passing an already-absolute URL (e.g. from cart_url()) through the |host filter would join route_prefix() + absolute URL, producing "https://host/https://host/path/". Now detects schemes in later segments and resets the base. Also add missing 'market' entry to _nav.html _app_slugs to match _nav_oob.html — without it the market menu item fell through to coop_url('/market/') instead of market_url('/'). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
7
utils.py
7
utils.py
@@ -39,7 +39,12 @@ def _join_url_parts(parts: List[str]) -> str:
|
||||
cleaned = [first.strip("/")]
|
||||
for seg in parts[1:]:
|
||||
seg = str(seg)
|
||||
if seg.startswith("?") or seg.startswith("#"):
|
||||
# If a later segment is already an absolute URL, use it as the base
|
||||
m2 = re.match(r"^([a-zA-Z][a-zA-Z0-9+.-]*://)(.*)$", seg)
|
||||
if m2:
|
||||
scheme, first = m2.group(1), m2.group(2)
|
||||
cleaned = [first.strip("/")]
|
||||
elif seg.startswith("?") or seg.startswith("#"):
|
||||
cleaned[-1] = cleaned[-1] + seg # attach query/fragment
|
||||
else:
|
||||
cleaned.append(seg.strip("/"))
|
||||
|
||||
Reference in New Issue
Block a user