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')
})