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

时间:2019-03-15 11:01:30

标签: python django 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

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

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

1 个答案:

答案 0 :(得分:2)

我找到了解决问题的方法,并将其发布在这里,供任何对未来感兴趣的人使用。

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

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

感谢大家的建议。