diff --git a/src/c3nav/editor/templates/editor/list.html b/src/c3nav/editor/templates/editor/list.html index b6cf06f8..d4548076 100644 --- a/src/c3nav/editor/templates/editor/list.html +++ b/src/c3nav/editor/templates/editor/list.html @@ -3,7 +3,7 @@ {% include 'editor/fragment_sections.html' %} - + {% blocktrans %}New {{ model_title }}{% endblocktrans %}

{% blocktrans %}{{ model_title_plural }}{% endblocktrans %}

@@ -19,7 +19,7 @@ {% endif %} {{ item.title }} - {% trans 'Edit' %} + {% trans 'Edit' %} {% endfor %} diff --git a/src/c3nav/editor/urls.py b/src/c3nav/editor/urls.py index 921a6cd4..75f0519b 100644 --- a/src/c3nav/editor/urls.py +++ b/src/c3nav/editor/urls.py @@ -3,11 +3,12 @@ from django.conf.urls import url from c3nav.editor.views import edit, list_objects, main_index, section_detail -def add_editor_urls(name, model): +def add_editor_urls(name, model, parent_name_plural=None, parent_name=None): + prefix = '' if parent_name is None else parent_name_plural+r'/(?P<'+parent_name+'>[0-9]+)/' return [ - url(r'^'+name+r'/$', list_objects, name='editor.'+name+'.list', kwargs={'model': model}), - url(r'^'+name+r'/(?P[0-9]+)/$', edit, name='editor.'+name+'.edit', kwargs={'model': model}), - url(r'^'+name+r'/create$', edit, name='editor.'+name+'.create', kwargs={'model': model}), + url(r'^'+prefix+name+r'/$', list_objects, name='editor.'+name+'.list', kwargs={'model': model}), + url(r'^'+prefix+name+r'/(?P[0-9]+)/$', edit, name='editor.'+name+'.edit', kwargs={'model': model}), + url(r'^'+prefix+name+r'/create$', edit, name='editor.'+name+'.create', kwargs={'model': model}), ] @@ -18,4 +19,4 @@ urlpatterns = [ url(r'^sections/create$', edit, name='editor.section.create', kwargs={'model': 'Section'}), ] urlpatterns.extend(add_editor_urls('locationgroups', 'LocationGroup')) -urlpatterns.extend(add_editor_urls('doors', 'Door')) +urlpatterns.extend(add_editor_urls('doors', 'Door', 'sections', 'section')) diff --git a/src/c3nav/editor/views.py b/src/c3nav/editor/views.py index 2c0c2a2f..ebf49c62 100644 --- a/src/c3nav/editor/views.py +++ b/src/c3nav/editor/views.py @@ -137,25 +137,39 @@ def list_objects(request, model=None, section=None, space=None): if not request.resolver_match.url_name.endswith('.list'): raise ValueError('url_name does not end with .list') + reverse_kwargs = {} + if section is not None: + reverse_kwargs['section'] = section + if space is not None: + reverse_kwargs['space'] = space + # noinspection PyProtectedMember ctx = { - 'create_url': request.resolver_match.url_name[:-4]+'create', - 'edit_url': request.resolver_match.url_name[:-4]+'edit', + 'create_url': reverse(request.resolver_match.url_name[:-4]+'create', kwargs=reverse_kwargs), 'path': request.path, 'model_name': model.__name__.lower(), 'model_title': model._meta.verbose_name, 'model_title_plural': model._meta.verbose_name_plural, - 'objects': model.objects.all().order_by('id'), } + queryset = model.objects.all().order_by('id') + for obj in queryset: + reverse_kwargs['pk'] = obj.pk + obj.edit_url = reverse(request.resolver_match.url_name[:-4]+'edit', kwargs=reverse_kwargs) + reverse_kwargs.pop('pk', None) + if space is not None: + space = get_object_or_404(Section, pk=section) + queryset = queryset.filter(space=space) ctx.update({ - 'back_url': reverse('editor.space', kwargs={'pk': space}), + 'back_url': reverse('editor.space', kwargs={'pk': space.pk}), 'back_title': _('back to space'), }) elif section is not None: + section = get_object_or_404(Section, pk=section) + queryset = queryset.filter(section=section) ctx.update({ - 'back_url': reverse('editor.space', kwargs={'pk': space}), + 'back_url': reverse('editor.section', kwargs={'pk': section.pk}), 'back_title': _('back to space'), }) else: @@ -164,4 +178,8 @@ def list_objects(request, model=None, section=None, space=None): 'back_title': _('back to overview'), }) + ctx.update({ + 'objects': queryset, + }) + return render(request, 'editor/list.html', ctx)