Я использую 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, чтобы получить позиции с помощью геттера.
Есть ли другой способ передать аргументы между маркером и представлением? Мне удалось получить термин запроса на мой взгляд, но у меня нет текстового блока, в котором был найден термин запроса, ни полного текста для повторного поиска позиции. Кроме того, я думаю, что этот подход будет медленным при масштабировании программы.
Первая часть вашего вопроса (как получить номер страницы) звучит тривиально, поскольку вы уже сказали, что знаете, какая страница будет следующей. Вторая часть, как сделать ссылку на конкретную страницу, действительно то, что вы предлагаете, согласно саман. Так что просто продолжайте, напишите код и задайте более конкретный вопрос, если столкнетесь с проблемой.
@dirkgroten первая часть на самом деле не была вопросом. Я просто дал как можно больше контекста, чтобы вы лучше поняли, что я хочу сделать. Следуя вашему предложению, я отредактировал свой пост тем, что пробовал.
print(pos) на ваш взгляд ничего не печатает?
Я поставил это по причинам отладки, но я ничего не получаю.
Я не понимаю строчку pos = Highlighter.getPos(). Это точный код, который вы используете? Я ожидаю, что это приведет к сбою, поскольку Highlighter не имеет атрибута getPos. Так что покажите нам код, который вы используете, чтобы получить pos.
Я добавил функцию получения, которая возвращает позицию первого попадания.
Приятно, что вы поняли, что должны использовать экземпляр класса Highlighter. Затем, пожалуйста, покажите нам свой код получения этого экземпляра/объекта. Возможно, вам следует сначала пройти Некоторые примеры.






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