Django Pass Haystack подсветка результата для представления - PullRequest
6 голосов
/ 15 марта 2019

Я использую django-haystack, и я пытаюсь реализовать способ добавить номер страницы к PDF-ссылке, чтобы открыть ее на определенной странице.Моя цель - открыть PDF-файл на странице, где найден первый хит.Я знаю позицию попадания в моем документе и позицию, где страница изменяется.Например, я знаю, что первый удар начинается с символа 2067, а вторая страница меняется с символа 3000, поэтому мне нужно открыть PDF-файл на второй странице.

Мой вопрос: как я могу получить результатфункция, которая находит номер страницы, где PDF должен открываться и отображать его?

Я думаю, что результат должен быть примерно таким <a href="{% static 'img/sample.pdf#page={{ pageNumber }}' %}">, но я открыт для любых других предложений.

PS Я не прошу вас решить мою проблему.Я прошу предложений или конструктивного обсуждения, поскольку я новичок в Django.

Заранее спасибо

РЕДАКТИРОВАТЬ

Так что после исследования длянемного я сделал следующее.Я обнаружил, что у класса подсветки есть функция, которая находит положение попаданий.Я добавил геттер в этот класс, чтобы получить позиции (я изменю его позже. Сейчас я хочу посмотреть, работает ли он так, как я думаю).Затем в моем файле views.py я добавил следующее

from django.shortcuts import render
from haystack.utils.highlighting import Highlighter


def getPage(request):
        pos = Highlighter.getPos()
        print (pos)
        return render(request, 'search/_result_object.html', {'pos': pos})

, а в своем HTML-файле я добавил это

<ul>
    {% for element in pos %}
        <li>{{ element }}</li>
    {% endfor %}
</ul>

просто для того, чтобы напечатать позицию и увидеть, что все работает нормально.Но список пуст, что означает, что я не получаю результатов.Может быть, что-то работает не так, как я думаю.Любые идеи?

Редактировать # 2

Я думаю, что невозможно получить позиции от маркера, так как у меня нет фактического объекта маркера для того, чтобыполучить позиции, используя геттер.

Есть ли другой способ передачи аргументов между маркером и представлением?Мне удалось получить термин запроса в моем представлении, но у меня нет текстового блока, в котором был найден термин запроса, и полного текста для повторного поиска позиции.Кроме того, я думаю, что этот подход будет медленным, когда программа масштабируется.

1 Ответ

2 голосов
/ 19 марта 2019

Я нашел решение для своей проблемы и выложил его здесь для всех, кто интересуется будущим.

Итак, я закончил тем, что написал новый шаблонный тег с именем findpage, используя тег выделения в качестве ссылки.Все необходимое для создания пользовательского тега можно найти здесь .Таким образом, я могу назвать его вот так {% findpage obj.content with query %} и передать запрос в качестве аргумента, чтобы найти позицию попаданий запроса в текстовом блоке.Учитывая разрывы страниц и положение запроса в документе, теперь я могу найти точную страницу, на которой я должен открыть PDF-файл.Ссылка теперь выглядит следующим образом: <a href= "{% static "img/sample.pdf#page=" %}{% findpage obj.content with query %}" >.

. Надеюсь, что в будущем это кому-нибудь пригодится.Я постараюсь ответить на любой вопрос, который может возникнуть.

Спасибо всем за их предложения.

...