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]:
|
||||
cache_key = 'mapdata:location:by_slug:%s:%s' % (AccessPermission.cache_key_for_request(request), slug)
|
||||
locations = cache.get(cache_key, None)
|
||||
if locations is not None:
|
||||
return locations
|
||||
location = cache.get(cache_key, None)
|
||||
if location is not None:
|
||||
return location
|
||||
|
||||
if ':' in slug:
|
||||
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)
|
||||
|
||||
return locations
|
||||
return location
|
||||
|
|
|
@ -107,7 +107,11 @@ c3nav = {
|
|||
|
||||
var url;
|
||||
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 {
|
||||
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+)?))?'
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^r/(?P<origin>([a-z0-9-_:]+)?)/(?P<destination>([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'^(?P<mode>[lod])/(?P<slug>[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')
|
||||
]
|
||||
|
|
|
@ -72,7 +72,7 @@ def check_location(location: Optional[str], request) -> Optional[SpecificLocatio
|
|||
|
||||
location = get_location_by_slug_for_request(location, request)
|
||||
if location is None:
|
||||
return
|
||||
return None
|
||||
|
||||
if isinstance(location, LocationRedirect):
|
||||
location: Location = location.target
|
||||
|
@ -99,21 +99,30 @@ def get_levels(request) -> Mapping[int, Level]:
|
|||
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)
|
||||
|
||||
origin_slug, destination_slug = origin, destination
|
||||
|
||||
origin = check_location(origin or None, request)
|
||||
destination = check_location(destination or None, request)
|
||||
origin = None
|
||||
destination = None
|
||||
routing = False
|
||||
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 = {
|
||||
'routing': origin_slug is not None,
|
||||
'routing': routing,
|
||||
'origin': (origin.serialize(detailed=False, simple_geometry=True, geometry=False)
|
||||
if origin else None),
|
||||
'destination': (destination.serialize(detailed=False, simple_geometry=True, geometry=False)
|
||||
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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue