Django передает результат выделения Haystack в представление

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

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

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

P.S. Я не прошу вас решить мою проблему. Я прошу предложений или конструктивного обсуждения, так как я новичок в 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

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

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

Что вы пробовали, пожалуйста, покажите нам

Cipher 15.03.2019 12:05

Первая часть вашего вопроса (как получить номер страницы) звучит тривиально, поскольку вы уже сказали, что знаете, какая страница будет следующей. Вторая часть, как сделать ссылку на конкретную страницу, действительно то, что вы предлагаете, согласно саман. Так что просто продолжайте, напишите код и задайте более конкретный вопрос, если столкнетесь с проблемой.

dirkgroten 15.03.2019 12:26

@dirkgroten первая часть на самом деле не была вопросом. Я просто дал как можно больше контекста, чтобы вы лучше поняли, что я хочу сделать. Следуя вашему предложению, я отредактировал свой пост тем, что пробовал.

mnmbs 15.03.2019 12:37
print(pos) на ваш взгляд ничего не печатает?
dirkgroten 15.03.2019 12:40

Я поставил это по причинам отладки, но я ничего не получаю.

mnmbs 15.03.2019 12:41

Я не понимаю строчку pos = Highlighter.getPos(). Это точный код, который вы используете? Я ожидаю, что это приведет к сбою, поскольку Highlighter не имеет атрибута getPos. Так что покажите нам код, который вы используете, чтобы получить pos.

dirkgroten 15.03.2019 13:19

Я добавил функцию получения, которая возвращает позицию первого попадания.

mnmbs 15.03.2019 13:22

Приятно, что вы поняли, что должны использовать экземпляр класса Highlighter. Затем, пожалуйста, покажите нам свой код получения этого экземпляра/объекта. Возможно, вам следует сначала пройти Некоторые примеры.

gdlmx 19.03.2019 05:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
6
8
198
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме