Django 将 Haystack 荧光笔结果传递给视图
Django pass Haystack highlighter result to a view
我正在使用 django-haystack,我正在尝试实现一种将页码附加到 pdf link 以便在特定页面中打开它的方法。我的目标是在找到第一个匹配项的页面中打开 pdf。我知道命中在我的文档中的位置和页面变化的位置。例如,我知道第一次点击从字符 2067 开始,第二页在字符 3000 处更改,所以我必须在第二页打开 pdf。
我的问题是:如何获得查找 pdf 应该打开并呈现的页码的函数的结果?
我认为结果应该是这样的 <a href="{% static 'img/sample.pdf#page={{ pageNumber }}' %}">
但我愿意接受任何其他建议。
P.S。我不是要你解决我的问题。由于我是 django 的新手,我正在寻求建议或建设性的讨论。
提前致谢
编辑
所以在研究了一下之后我做了以下事情。我发现荧光笔class有一个找到命中位置的功能。我在 class 中添加了一个 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
我认为不可能从荧光笔获取位置,因为我没有实际的荧光笔对象,无法使用 getter.
获取位置
有没有其他方法可以在荧光笔和视图之间传递参数?我设法在我的视图中获得了查询词,但我没有找到查询词的文本块,也没有全文来再次搜索该位置。另外,我认为当程序按比例放大时,这种方法会很慢。
我找到了我的问题的解决方案,我post在这里为任何对未来感兴趣的人提供。
所以,我最终使用高亮标记作为参考编写了一个名为 findpage
的新模板标记。可以找到创建自定义标签所需的一切 here。这样我就可以像这样调用它 {% findpage obj.content with query %}
并将查询作为参数传递,以便找到查询命中在文本块中的位置。鉴于文档中的分页符和查询命中的位置,我现在可以找到我应该打开 pdf 的确切页面。 link 现在看起来像这样 <a href= "{% static "img/sample.pdf#page=" %}{% findpage obj.content with query %}" >
。
我希望这对以后的人有用。我会尽力回答可能出现的任何问题。
感谢大家的建议。
我正在使用 django-haystack,我正在尝试实现一种将页码附加到 pdf link 以便在特定页面中打开它的方法。我的目标是在找到第一个匹配项的页面中打开 pdf。我知道命中在我的文档中的位置和页面变化的位置。例如,我知道第一次点击从字符 2067 开始,第二页在字符 3000 处更改,所以我必须在第二页打开 pdf。
我的问题是:如何获得查找 pdf 应该打开并呈现的页码的函数的结果?
我认为结果应该是这样的 <a href="{% static 'img/sample.pdf#page={{ pageNumber }}' %}">
但我愿意接受任何其他建议。
P.S。我不是要你解决我的问题。由于我是 django 的新手,我正在寻求建议或建设性的讨论。
提前致谢
编辑
所以在研究了一下之后我做了以下事情。我发现荧光笔class有一个找到命中位置的功能。我在 class 中添加了一个 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
我认为不可能从荧光笔获取位置,因为我没有实际的荧光笔对象,无法使用 getter.
获取位置有没有其他方法可以在荧光笔和视图之间传递参数?我设法在我的视图中获得了查询词,但我没有找到查询词的文本块,也没有全文来再次搜索该位置。另外,我认为当程序按比例放大时,这种方法会很慢。
我找到了我的问题的解决方案,我post在这里为任何对未来感兴趣的人提供。
所以,我最终使用高亮标记作为参考编写了一个名为 findpage
的新模板标记。可以找到创建自定义标签所需的一切 here。这样我就可以像这样调用它 {% findpage obj.content with query %}
并将查询作为参数传递,以便找到查询命中在文本块中的位置。鉴于文档中的分页符和查询命中的位置,我现在可以找到我应该打开 pdf 的确切页面。 link 现在看起来像这样 <a href= "{% static "img/sample.pdf#page=" %}{% findpage obj.content with query %}" >
。
我希望这对以后的人有用。我会尽力回答可能出现的任何问题。
感谢大家的建议。