Django将Haystack荧光笔结果传递给了一个视图

问题描述 投票:6回答:1

我正在使用django-haystack,我正在尝试实现一种方法将页码附加到pdf链接,以便在特定页面中打开它。我的目标是在找到第一个匹配的页面中打开pdf。我知道文档中匹配的位置以及页面更改的位置。例如,我知道第一个点击从字符2067开始,第二个页面在字符3000处变化,所以我必须在第二页打开pdf。

我的问题是:如何获得函数的结果,该函数找到pdf应该打开并呈现的页面的编号?

我认为结果应该像<a href="{% static 'img/sample.pdf#page={{ pageNumber }}' %}">那样,但我对任何其他建议持开放态度。

附:我不是要求你解决我的问题。我正在寻求建议或建设性的讨论,因为我是django的新手。

先感谢您

编辑

所以经过研究,我做了以下几点。我发现荧光笔类有一个函数可以找到命中的位置。为了获得位置,我在那个类中添加了一个getter(我稍后会改变它。现在我想看看它是否按照我认为应该的方式工作)。然后在我的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

我认为从荧光笔中获取位置是不可能的,因为我没有实际的荧光笔对象以便使用吸气剂获得位置。

有没有其他方法可以在荧光笔和视图之间传递参数?我设法在我的视图中获取查询字词,但我没有找到查询字词的文本块,也没有再次搜索该位置的全文。此外,我认为当程序扩展时,这种方法会很慢。

python django django-haystack
1个回答
2
投票

我找到了解决问题的方法,我在这里发布给任何对未来感兴趣的人。

所以,我最终使用高亮标记作为参考编写了一个名为findpage的新模板标签。创建自定义标签所需的一切都可以找到here。这样我可以像这个{% findpage obj.content with query %}一样调用它并将查询作为参数传递,以便在文本块中找到查询命中的位置。鉴于页面中断和文档中查询的​​位置,我现在可以找到我应该打开pdf的确切页面。链接现在看起来像这个<a href= "{% static "img/sample.pdf#page=" %}{% findpage obj.content with query %}" >

我希望这对未来的人有用。我会尝试回答可能出现的任何问题。

感谢大家的建议。

© www.soinside.com 2019 - 2024. All rights reserved.