модуль search.views не имеет атрибута search - PullRequest
0 голосов
/ 14 июля 2020

Я использую систему управления трясогузкой для поиска. Я использую поиск по умолчанию в папке / search. Когда я выполняю поиск, я получаю следующее исключение.

AttributeError в / search / module 'search.views' не имеет атрибута 'search'

Это мой views.py

    from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from django.shortcuts import render

from wagtail.core.models import Page
from wagtail.search.models import Query


def search(request):
    search_query = request.GET.get('query', None)
    page = request.GET.get('page', 1)

    # Search
    if search_query:
        search_results = Page.objects.live().search(search_query)
        query = Query.get(search_query)

        # Record hit
        query.add_hit()
    else:
        search_results = Page.objects.none()

    # Pagination
    paginator = Paginator(search_results, 10)
    try:
        search_results = paginator.page(page)
    except PageNotAnInteger:
        search_results = paginator.page(1)
    except EmptyPage:
        search_results = paginator.page(paginator.num_pages)

    return render(request, 'search/search.html', {
        'search_query': search_query,
        'search_results': search_results,
    })

Это мой шаблон / поиск / поиск. html

{% extends "base.html" %}
{% load static wagtailcore_tags %}

{% block body_class %}template-searchresults{% endblock %}

{% block title %}Search{% endblock %}

{% block content %}
    <h1>Search</h1>

    <form action="{% url 'search' %}" method="get">
        <input type="text" name="query"{% if search_query %} value="{{ search_query }}"{% endif %}>
        <input type="submit" value="Search" class="button">
    </form>

    {% if search_results %}
        <ul>
            {% for result in search_results %}
                <li>
                    <h4><a href="{% pageurl result %}">{{ result }}</a></h4>
                    {% if result.search_description %}
                        {{ result.search_description }}
                    {% endif %}
                </li>
            {% endfor %}
        </ul>

        {% if search_results.has_previous %}
            <a href="{% url 'search' %}?query={{ search_query|urlencode }}&amp;page={{ search_results.previous_page_number }}">Previous</a>
        {% endif %}

        {% if search_results.has_next %}
            <a href="{% url 'search' %}?query={{ search_query|urlencode }}&amp;page={{ search_results.next_page_number }}">Next</a>
        {% endif %}
    {% elif search_query %}
        No results found
    {% endif %}
{% endblock %

}

При выполнении поиска появляется следующая ошибка

AttributeError в / search / module 'search.views' не имеет атрибута 'search'

URLS.py

from search import views as search_views

urlpatterns = [
url(r'^django-admin/', admin.site.urls),

url(r'^admin/', include(wagtailadmin_urls)),
url(r'^documents/', include(wagtaildocs_urls)),

url(r'^search/$', search_views.search, name='search'),

url(r'sitemap.xml', sitemap),

url(r'^wagtail-transfer/', include(wagtailtransfer_urls)),

]

Структура каталога

введите описание изображения здесь

1 Ответ

0 голосов
/ 14 июля 2020

Я не вижу ошибок. Я предполагаю, что у вас установлен пакет django с тем же именем «поиск». Поэтому я думаю, что изменение имени приложения решит вашу проблему. С другой стороны, вы можете отделить URL-адреса приложений от основных URL-адресов и использовать относительный импорт. Для этого вам нужно сделать

  1. создать файл с именем urls.py в вашем search приложении.
from django.urls import path
from . import views as search_view

urlpatterns = [
    path('', search_views.search, name='search')
]
включить urls.py (поиск по форме) в главную urls.py
#from search import views as search_views

urlpatterns = [
url(r'^django-admin/', admin.site.urls),

url(r'^admin/', include(wagtailadmin_urls)),
url(r'^documents/', include(wagtaildocs_urls)),

url(r'^search/', include('search.urls')),

url(r'sitemap.xml', sitemap),

url(r'^wagtail-transfer/', include(wagtailtransfer_urls)),
]
...