diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html index c5e1e1a78..f1270dc47 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/browse.html @@ -6,7 +6,7 @@ {% trans "Choose a page" as choose_str %} {% endif %} -{% include "wagtailadmin/shared/header.html" with title=choose_str subtitle=subtitle search_url="wagtailadmin_choose_page" query_parameters="page_type="|add:page_type_string icon="doc-empty-inverse" %} +{% include "wagtailadmin/shared/header.html" with title=choose_str subtitle=subtitle search_url="wagtailadmin_choose_page_search" query_parameters="page_type="|add:page_type_string icon="doc-empty-inverse" %}
{% include 'wagtailadmin/chooser/_link_types.html' with current='internal' %} diff --git a/wagtail/wagtailadmin/urls.py b/wagtail/wagtailadmin/urls.py index 805e237e2..b16d9db67 100644 --- a/wagtail/wagtailadmin/urls.py +++ b/wagtail/wagtailadmin/urls.py @@ -54,6 +54,7 @@ urlpatterns = [ url(r'^choose-page/$', chooser.browse, name='wagtailadmin_choose_page'), url(r'^choose-page/(\d+)/$', chooser.browse, name='wagtailadmin_choose_page_child'), + url(r'^choose-page/search/$', chooser.search, name='wagtailadmin_choose_page_search'), url(r'^choose-external-link/$', chooser.external_link, name='wagtailadmin_choose_page_external_link'), url(r'^choose-email-link/$', chooser.email_link, name='wagtailadmin_choose_page_email_link'), diff --git a/wagtail/wagtailadmin/views/chooser.py b/wagtail/wagtailadmin/views/chooser.py index a177daddf..282b61571 100644 --- a/wagtail/wagtailadmin/views/chooser.py +++ b/wagtail/wagtailadmin/views/chooser.py @@ -22,32 +22,20 @@ def browse(request, parent_page_id=None): page_type = request.GET.get('page_type') or 'wagtailcore.page' content_type_app_name, content_type_model_name = page_type.split('.') - is_searching = False - page_types_restricted = page_type != 'wagtailcore.page' - try: content_type = ContentType.objects.get_by_natural_key(content_type_app_name, content_type_model_name) except ContentType.DoesNotExist: raise Http404 desired_class = content_type.model_class() - if 'q' in request.GET: - search_form = SearchForm(request.GET) - if search_form.is_valid() and search_form.cleaned_data['q']: - pages = desired_class.objects.exclude( - depth=1 # never include root - ).filter(title__icontains=search_form.cleaned_data['q'])[:10] - is_searching = True + if parent_page_id: + parent_page = get_object_or_404(Page, id=parent_page_id) + else: + parent_page = Page.get_first_root_node() - if not is_searching: - if parent_page_id: - parent_page = get_object_or_404(Page, id=parent_page_id) - else: - parent_page = Page.get_first_root_node() - - parent_page.can_choose = issubclass(parent_page.specific_class, desired_class) - search_form = SearchForm() - pages = parent_page.get_children() + parent_page.can_choose = issubclass(parent_page.specific_class, desired_class) + search_form = SearchForm() + pages = parent_page.get_children() # restrict the page listing to just those pages that: # - are of the given content type (taking into account class inheritance) @@ -61,16 +49,6 @@ def browse(request, parent_page_id=None): if page.can_choose or page.can_descend: shown_pages.append(page) - if is_searching: - return render(request, 'wagtailadmin/chooser/_search_results.html', { - 'querystring': get_querystring(request), - 'searchform': search_form, - 'pages': shown_pages, - 'page_type_string': page_type, - 'page_type': desired_class, - 'page_types_restricted': page_types_restricted - }) - return render_modal_workflow(request, 'wagtailadmin/chooser/browse.html', 'wagtailadmin/chooser/browse.js', { 'allow_external_link': request.GET.get('allow_external_link'), 'allow_email_link': request.GET.get('allow_email_link'), @@ -80,7 +58,39 @@ def browse(request, parent_page_id=None): 'search_form': search_form, 'page_type_string': page_type, 'page_type': desired_class, - 'page_types_restricted': page_types_restricted + 'page_types_restricted': (page_type != 'wagtailcore.page') + }) + + +def search(request, parent_page_id=None): + page_type = request.GET.get('page_type') or 'wagtailcore.page' + content_type_app_name, content_type_model_name = page_type.split('.') + + try: + content_type = ContentType.objects.get_by_natural_key(content_type_app_name, content_type_model_name) + except ContentType.DoesNotExist: + raise Http404 + desired_class = content_type.model_class() + + search_form = SearchForm(request.GET) + if search_form.is_valid() and search_form.cleaned_data['q']: + pages = desired_class.objects.exclude( + depth=1 # never include root + ).filter(title__icontains=search_form.cleaned_data['q'])[:10] + else: + pages = desired_class.objects.none() + + shown_pages = [] + for page in pages: + page.can_choose = True + shown_pages.append(page) + + return render(request, 'wagtailadmin/chooser/_search_results.html', { + 'querystring': get_querystring(request), + 'searchform': search_form, + 'pages': shown_pages, + 'page_type': desired_class, + 'page_types_restricted': (page_type != 'wagtailcore.page') })