diff --git a/wagtail/snippets/views/chooser.py b/wagtail/snippets/views/chooser.py index d921590a2d..410d2f7a55 100644 --- a/wagtail/snippets/views/chooser.py +++ b/wagtail/snippets/views/chooser.py @@ -16,9 +16,9 @@ from wagtail.snippets.views.snippets import get_snippet_model_from_url_params class ChooseView(View): def get(self, request, app_label, model_name): - model = get_snippet_model_from_url_params(app_label, model_name) + self.model = get_snippet_model_from_url_params(app_label, model_name) - items = model.objects.all() + items = self.model.objects.all() # Preserve the snippet's model-level ordering if specified, but fall back on PK if not # (to ensure pagination is consistent) @@ -26,73 +26,77 @@ class ChooseView(View): items = items.order_by('pk') # Filter by locale - locale = None - locale_filter = None - selected_locale = None - if issubclass(model, TranslatableMixin): + self.locale = None + self.locale_filter = None + self.selected_locale = None + if issubclass(self.model, TranslatableMixin): # 'locale' is the Locale of the object that this snippet is being chosen for if request.GET.get('locale'): - locale = get_object_or_404(Locale, language_code=request.GET['locale']) + self.locale = get_object_or_404(Locale, language_code=request.GET['locale']) # 'locale_filter' is the current value of the "Locale" selector in the UI if request.GET.get('locale_filter'): - locale_filter = get_object_or_404(Locale, language_code=request.GET['locale_filter']) + self.locale_filter = get_object_or_404(Locale, language_code=request.GET['locale_filter']) - selected_locale = locale_filter or locale + self.selected_locale = self.locale_filter or self.locale - if selected_locale: - items = items.filter(locale=selected_locale) + if self.selected_locale: + items = items.filter(locale=self.selected_locale) # Search - is_searchable = class_is_indexed(model) - is_searching = False - search_query = None - if is_searchable and 'q' in request.GET: - search_form = SearchForm(request.GET, placeholder=_("Search %(snippet_type_name)s") % { - 'snippet_type_name': model._meta.verbose_name + self.is_searchable = class_is_indexed(self.model) + self.is_searching = False + self.search_query = None + if self.is_searchable and 'q' in request.GET: + self.search_form = SearchForm(request.GET, placeholder=_("Search %(snippet_type_name)s") % { + 'snippet_type_name': self.model._meta.verbose_name }) - if search_form.is_valid(): - search_query = search_form.cleaned_data['q'] + if self.search_form.is_valid(): + self.search_query = self.search_form.cleaned_data['q'] search_backend = get_search_backend() - items = search_backend.search(search_query, items) - is_searching = True + items = search_backend.search(self.search_query, items) + self.is_searching = True else: - search_form = SearchForm(placeholder=_("Search %(snippet_type_name)s") % { - 'snippet_type_name': model._meta.verbose_name + self.search_form = SearchForm(placeholder=_("Search %(snippet_type_name)s") % { + 'snippet_type_name': self.model._meta.verbose_name }) # Pagination paginator = Paginator(items, per_page=25) - paginated_items = paginator.get_page(request.GET.get('p')) + self.paginated_items = paginator.get_page(request.GET.get('p')) + return self.render_to_response() + + def render_to_response(self): # If paginating or searching, render "results.html" - if request.GET.get('results', None) == 'true': - return TemplateResponse(request, "wagtailsnippets/chooser/results.html", { - 'model_opts': model._meta, - 'items': paginated_items, - 'query_string': search_query, - 'is_searching': is_searching, + if self.request.GET.get('results', None) == 'true': + return TemplateResponse(self.request, "wagtailsnippets/chooser/results.html", { + 'model_opts': self.model._meta, + 'items': self.paginated_items, + 'query_string': self.search_query, + 'is_searching': self.is_searching, }) - return render_modal_workflow( - request, - 'wagtailsnippets/chooser/choose.html', None, - { - 'model_opts': model._meta, - 'items': paginated_items, - 'is_searchable': is_searchable, - 'search_form': search_form, - 'query_string': search_query, - 'is_searching': is_searching, - 'locale': locale, - 'locale_filter': locale_filter, - 'selected_locale': selected_locale, - 'locale_options': Locale.objects.all() if issubclass(model, TranslatableMixin) else [], - }, json_data={'step': 'choose'} - ) + else: + return render_modal_workflow( + self.request, + 'wagtailsnippets/chooser/choose.html', None, + { + 'model_opts': self.model._meta, + 'items': self.paginated_items, + 'is_searchable': self.is_searchable, + 'search_form': self.search_form, + 'query_string': self.search_query, + 'is_searching': self.is_searching, + 'locale': self.locale, + 'locale_filter': self.locale_filter, + 'selected_locale': self.selected_locale, + 'locale_options': Locale.objects.all() if issubclass(self.model, TranslatableMixin) else [], + }, json_data={'step': 'choose'} + ) def chosen(request, app_label, model_name, pk):