def get_object(self): model = get_snippet_model_from_url_params(self.kwargs["app_label"], self.kwargs["model_name"]) if not issubclass(model, TranslatableMixin): raise Http404 return get_object_or_404(model, pk=unquote(self.kwargs["pk"]))
def get(self, request, app_label, model_name): self.model = get_snippet_model_from_url_params(app_label, model_name) 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) if not items.ordered: items = items.order_by('pk') # Filter by locale 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'): 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'): self.locale_filter = get_object_or_404( Locale, language_code=request.GET['locale_filter']) self.selected_locale = self.locale_filter or self.locale if self.selected_locale: items = items.filter(locale=self.selected_locale) # Search 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 self.search_form.is_valid(): self.search_query = self.search_form.cleaned_data['q'] search_backend = get_search_backend() items = search_backend.search(self.search_query, items) self.is_searching = True else: 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) self.paginated_items = paginator.get_page(request.GET.get('p')) return self.render_to_response()
def choose(request, app_label, model_name): model = get_snippet_model_from_url_params(app_label, model_name) items = model.objects.all() # Preserve the snippet's model-level ordering if specified, but fall back on PK if not # (to ensure pagination is consistent) if not items.ordered: items = items.order_by('pk') # 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}) if search_form.is_valid(): search_query = search_form.cleaned_data['q'] search_backend = get_search_backend() items = search_backend.search(search_query, items) is_searching = True else: search_form = SearchForm( placeholder=_("Search %(snippet_type_name)s") % {'snippet_type_name': model._meta.verbose_name}) # Pagination paginator = Paginator(items, per_page=25) paginated_items = paginator.get_page(request.GET.get('p')) # If paginating or searching, render "results.html" if request.GET.get('results', None) == 'true': return render( request, "wagtailsnippets/chooser/results.html", { 'model_opts': model._meta, 'items': paginated_items, 'query_string': search_query, 'is_searching': 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, }, json_data={'step': 'choose'})
def choose(request, app_label, model_name): model = get_snippet_model_from_url_params(app_label, model_name) items = model.objects.all() # Preserve the snippet's model-level ordering if specified, but fall back on PK if not # (to ensure pagination is consistent) if not items.ordered: items = items.order_by('pk') # 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 }) if search_form.is_valid(): search_query = search_form.cleaned_data['q'] search_backend = get_search_backend() items = search_backend.search(search_query, items) is_searching = True else: search_form = SearchForm(placeholder=_("Search %(snippet_type_name)s") % { 'snippet_type_name': model._meta.verbose_name }) # Pagination paginator = Paginator(items, per_page=25) paginated_items = paginator.get_page(request.GET.get('p')) # If paginating or searching, render "results.html" if request.GET.get('results', None) == 'true': return render(request, "wagtailsnippets/chooser/results.html", { 'model_opts': model._meta, 'items': paginated_items, 'query_string': search_query, 'is_searching': 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, }, json_data={'step': 'choose'} )
def copy(request, app_label, model_name, id): # Validate snippet has been registered and title_field is set. title_field_name = snippet_copy_registry.get(app_label, model_name) if title_field_name is None: raise Exception("This snippet isn't registered as copyable") model = get_snippet_model_from_url_params(app_label, model_name) permission = get_permission_name('change', model) if not request.user.has_perm(permission): return permission_denied(request) snippet = get_object_or_404(model, id=id) # Create the form form = CopyForm(request.POST or None, snippet=snippet, title_field_name=title_field_name) next_url = get_valid_next_url_from_request(request) for fn in hooks.get_hooks('before_copy_snippet'): result = fn(request, snippet) if hasattr(result, 'status_code'): return result # Check if user is submitting if request.method == 'POST': if form.is_valid(): # Copy the snippet new_snippet = form.copy() # Give a success message back to the user messages.success(request, _("Snippet '{0}' copied.").format(snippet)) for fn in hooks.get_hooks('after_copy_snippet'): result = fn(request, snippet, new_snippet) if hasattr(result, 'status_code'): return result if next_url: return redirect(next_url) if 'wagtail.contrib.modeladmin' in settings.INSTALLED_APPS: url_helper = AdminURLHelper(new_snippet) return redirect(url_helper.get_action_url('edit', quote(new_snippet.pk))) return redirect('wagtailsnippets:edit', app_label, model_name, new_snippet.id) return render(request, 'wagtailsnippetscopy/copy.html', { 'snippet': snippet, 'app_label': app_label, 'model_name': model_name, 'form': form, 'next': next_url, })
def chosen(request, app_label, model_name, pk): model = get_snippet_model_from_url_params(app_label, model_name) item = get_object_or_404(model, pk=unquote(pk)) snippet_data = { "id": str(item.pk), "string": str(item), "edit_link": reverse( "wagtailsnippets:edit", args=(app_label, model_name, quote(item.pk)) ), } return render_modal_workflow( request, None, None, None, json_data={"step": "chosen", "result": snippet_data} )
def chosen(request, app_label, model_name, pk): model = get_snippet_model_from_url_params(app_label, model_name) item = get_object_or_404(model, pk=unquote(pk)) snippet_data = { 'id': str(item.pk), 'string': str(item), 'edit_link': reverse('wagtailsnippets:edit', args=( app_label, model_name, quote(item.pk))) } return render_modal_workflow( request, None, None, None, json_data={'step': 'chosen', 'result': snippet_data} )
def chosen(request, app_label, model_name, pk): model = get_snippet_model_from_url_params(app_label, model_name) item = get_object_or_404(model, pk=unquote(pk)) snippet_data = { 'id': str(item.pk), 'string': str(item), 'edit_link': reverse('wagtailsnippets:edit', args=( app_label, model_name, quote(item.pk))) } return render_modal_workflow( request, None, None, None, json_data={'step': 'chosen', 'result': snippet_data} )
def chosen(request, app_label, model_name, id): model = get_snippet_model_from_url_params(app_label, model_name) item = get_object_or_404(model, id=id) snippet_json = json.dumps({ 'id': item.id, 'string': str(item), 'edit_link': reverse('wagtailsnippets:edit', args=(app_label, model_name, item.id)) }) return render_modal_workflow(request, None, 'wagtailsnippets/chooser/chosen.js', { 'snippet_json': snippet_json, })
def chosen(request, app_label, model_name, pk): model = get_snippet_model_from_url_params(app_label, model_name) item = get_object_or_404(model, pk=unquote(pk)) snippet_json = json.dumps({ 'id': item.pk, 'string': str(item), 'edit_link': reverse('wagtailsnippets:edit', args=( app_label, model_name, quote(item.pk))) }) return render_modal_workflow( request, None, 'wagtailsnippets/chooser/chosen.js', { 'snippet_json': snippet_json, } )
def choose(request, app_label, model_name): model = get_snippet_model_from_url_params(app_label, model_name) items = model.objects.all() # Preserve the snippet's model-level ordering if specified, but fall back on PK if not # (to ensure pagination is consistent) if not items.ordered: items = items.order_by('pk') # Filter by locale locale = None locale_filter = None selected_locale = None if issubclass(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']) # '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']) selected_locale = locale_filter or locale if selected_locale: items = items.filter(locale=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}) if search_form.is_valid(): search_query = search_form.cleaned_data['q'] search_backend = get_search_backend() items = search_backend.search(search_query, items) is_searching = True else: search_form = SearchForm( placeholder=_("Search %(snippet_type_name)s") % {'snippet_type_name': model._meta.verbose_name}) # Pagination paginator = Paginator(items, per_page=25) paginated_items = paginator.get_page(request.GET.get('p')) # 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, 'locale': locale, 'locale_filter': locale_filter, 'selected_locale': selected_locale, }) 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'})
def get_model(self): return get_snippet_model_from_url_params(self.kwargs["app_label"], self.kwargs["model_name"])
def get_model(self): return get_snippet_model_from_url_params(self.kwargs['app_label'], self.kwargs['model_name'])