kopia lustrzana https://github.com/wagtail/wagtail
				
				
				
			Move response rendering into its own method
							rodzic
							
								
									7439f38d51
								
							
						
					
					
						commit
						7ddbcb18d7
					
				|  | @ -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): | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Matt Westcott
						Matt Westcott