change short urls to not rely on doule slashes
This commit is contained in:
parent
31bc299f77
commit
94a23454a1
4 changed files with 29 additions and 15 deletions
|
@ -129,9 +129,9 @@ def locations_by_slug_for_request(request) -> Mapping[str, LocationSlug]:
|
||||||
|
|
||||||
def get_location_by_slug_for_request(slug: str, request) -> Optional[LocationSlug]:
|
def get_location_by_slug_for_request(slug: str, request) -> Optional[LocationSlug]:
|
||||||
cache_key = 'mapdata:location:by_slug:%s:%s' % (AccessPermission.cache_key_for_request(request), slug)
|
cache_key = 'mapdata:location:by_slug:%s:%s' % (AccessPermission.cache_key_for_request(request), slug)
|
||||||
locations = cache.get(cache_key, None)
|
location = cache.get(cache_key, None)
|
||||||
if locations is not None:
|
if location is not None:
|
||||||
return locations
|
return location
|
||||||
|
|
||||||
if ':' in slug:
|
if ':' in slug:
|
||||||
code, pk = slug.split(':', 1)
|
code, pk = slug.split(':', 1)
|
||||||
|
@ -152,4 +152,4 @@ def get_location_by_slug_for_request(slug: str, request) -> Optional[LocationSlu
|
||||||
|
|
||||||
cache.set(cache_key, location, 300)
|
cache.set(cache_key, location, 300)
|
||||||
|
|
||||||
return locations
|
return location
|
||||||
|
|
|
@ -107,7 +107,11 @@ c3nav = {
|
||||||
|
|
||||||
var url;
|
var url;
|
||||||
if (state.routing) {
|
if (state.routing) {
|
||||||
url = '/r/'+(state.origin?state.origin.slug:'')+'/'+(state.destination?state.destination.slug:'')+'/';
|
if (state.origin) {
|
||||||
|
url = (state.destination) ? '/r/'+state.origin.slug+'/'+state.destination.slug+'/' : '/o/'+state.origin.slug+'/';
|
||||||
|
} else {
|
||||||
|
url = (state.destination) ? '/d/'+state.destination.slug+'/' : '/r/';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
url = state.destination?('/l/'+state.destination.slug+'/'):'/';
|
url = state.destination?('/l/'+state.destination.slug+'/'):'/';
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,8 @@ from c3nav.site.views import map_index
|
||||||
pos = r'(@(?P<level>[a-z0-9-_:]+),(?P<x>-?\d+(\.\d+)?),(?P<y>-?\d+(\.\d+)?),(?P<zoom>-?\d+(\.\d+)?))?'
|
pos = r'(@(?P<level>[a-z0-9-_:]+),(?P<x>-?\d+(\.\d+)?),(?P<y>-?\d+(\.\d+)?),(?P<zoom>-?\d+(\.\d+)?))?'
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^r/(?P<origin>([a-z0-9-_:]+)?)/(?P<destination>([a-z0-9-_:]+)?)/%s$' % pos, map_index, name='site.index'),
|
url(r'^(?P<mode>[lod])/(?P<slug>[a-z0-9-_:]+)/%s$' % pos, map_index, name='site.index'),
|
||||||
url(r'^l/(?P<destination>[a-z0-9-_:]+)/%s$' % pos, map_index, name='site.index'),
|
url(r'^r/(?P<slug>[a-z0-9-_:]+)/(?P<slug2>[a-z0-9-_:]+)/%s$' % pos, map_index, name='site.index'),
|
||||||
|
url(r'^(?P<mode>r)/%s$' % pos, map_index, name='site.index'),
|
||||||
url(r'^%s$' % pos, map_index, name='site.index')
|
url(r'^%s$' % pos, map_index, name='site.index')
|
||||||
]
|
]
|
||||||
|
|
|
@ -72,7 +72,7 @@ def check_location(location: Optional[str], request) -> Optional[SpecificLocatio
|
||||||
|
|
||||||
location = get_location_by_slug_for_request(location, request)
|
location = get_location_by_slug_for_request(location, request)
|
||||||
if location is None:
|
if location is None:
|
||||||
return
|
return None
|
||||||
|
|
||||||
if isinstance(location, LocationRedirect):
|
if isinstance(location, LocationRedirect):
|
||||||
location: Location = location.target
|
location: Location = location.target
|
||||||
|
@ -99,21 +99,30 @@ def get_levels(request) -> Mapping[int, Level]:
|
||||||
return levels
|
return levels
|
||||||
|
|
||||||
|
|
||||||
def map_index(request, origin=None, destination=None, level=None, x=None, y=None, zoom=None):
|
def map_index(request, mode=None, slug=None, slug2=None, level=None, x=None, y=None, zoom=None):
|
||||||
levels = Level.qs_for_request(request).filter(on_top_of_id__isnull=True)
|
levels = Level.qs_for_request(request).filter(on_top_of_id__isnull=True)
|
||||||
|
|
||||||
origin_slug, destination_slug = origin, destination
|
origin = None
|
||||||
|
destination = None
|
||||||
origin = check_location(origin or None, request)
|
routing = False
|
||||||
destination = check_location(destination or None, request)
|
if slug2 is not None:
|
||||||
|
routing = True
|
||||||
|
origin = check_location(slug, request)
|
||||||
|
destination = check_location(slug2, request)
|
||||||
|
else:
|
||||||
|
routing = (mode and mode != 'l')
|
||||||
|
if mode == 'o':
|
||||||
|
origin = check_location(slug, request)
|
||||||
|
else:
|
||||||
|
destination = check_location(slug, request)
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
'routing': origin_slug is not None,
|
'routing': routing,
|
||||||
'origin': (origin.serialize(detailed=False, simple_geometry=True, geometry=False)
|
'origin': (origin.serialize(detailed=False, simple_geometry=True, geometry=False)
|
||||||
if origin else None),
|
if origin else None),
|
||||||
'destination': (destination.serialize(detailed=False, simple_geometry=True, geometry=False)
|
'destination': (destination.serialize(detailed=False, simple_geometry=True, geometry=False)
|
||||||
if destination else None),
|
if destination else None),
|
||||||
'sidebar': destination_slug is not None,
|
'sidebar': routing or destination is not None,
|
||||||
}
|
}
|
||||||
|
|
||||||
levels_cache_key = 'mapdata:levels:%s' % AccessPermission.cache_key_for_request(request)
|
levels_cache_key = 'mapdata:levels:%s' % AccessPermission.cache_key_for_request(request)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue