mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-05-15 02:33:13 +00:00
Split search and browse into separate views
This commit is contained in:
parent
ae4d899cbf
commit
d7843f34e3
3 changed files with 42 additions and 31 deletions
|
|
@ -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" %}
|
||||
|
||||
<div class="nice-padding">
|
||||
{% include 'wagtailadmin/chooser/_link_types.html' with current='internal' %}
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
})
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue