自定义视图不显示带有弹性搜索的 Django Haystack 中的结果
Custom view does not show results in Django Haystack with Elastic Search
我开始将 Django Haystack 与 Elasticsearch 结合使用。
好吧,直到我按照 readthedocs 中的简单示例开始制作自定义视图。
search_indexes.py:
class ExperimentIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
owner = indexes.CharField(model_attr='owner')
def get_model(self):
return Experiment
def index_queryset(self, using=None):
return self.get_model().lastversion_objects.all()
urls.py:
url(r'^search/?$', NepSearchView.as_view(), name='search_view')
urls.py 之前(没有自定义视图):
url(r'^search/', include('haystack.urls'))
views.py
class NepSearchView(SearchView):
def get_queryset(self):
queryset = super(NepSearchView, self).get_queryset()
if not self.request.user.is_authenticated and \
self.request.user.groups.filter(name='trustees').exists():
return queryset # (with some filter)
else:
return queryset
search.html:
{# ... #}
{% for result in page.object_list %}
{% if result.model_name == 'experiment' %}
{% include 'search/experiments.html' %}
{% endif %}
{% if result.model_name == 'study' %}
{% include 'search/studies.html' %}
{% endif %}
{% if result.model_name == 'group' %}
{% include 'search/groups.html' %}
{% endif %}
{% if result.model_name == 'experimentalprotocol' %}
{% include 'search/experimental_protocol.html' %}
{% endif %}
{# ... #}
好吧,事实是当使用默认的 Haystack SearchView
我得到了正确的匹配,而当引入 NepSearchView
时,page.object_list
是空的,我得到 No results found.
在模板中。
我已经 运行 manage.py rebuild_index
,在网络上进行了广泛搜索,但找不到任何可以解释我所缺少的东西。
查询集的 page.object_list 变量名似乎不存在。
尝试不带 'page' 前缀的 object_list。
而不是
{% for result in page.object_list %}
使用
{% for result in object_list %}
或者,您可以通过附加类似这样的内容在视图中提供自定义变量名称
context_object_name = 'haystack_objects'
并在模板中使用它
{% for result in haystack_objects %}
我开始将 Django Haystack 与 Elasticsearch 结合使用。
好吧,直到我按照 readthedocs 中的简单示例开始制作自定义视图。
search_indexes.py:
class ExperimentIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
owner = indexes.CharField(model_attr='owner')
def get_model(self):
return Experiment
def index_queryset(self, using=None):
return self.get_model().lastversion_objects.all()
urls.py:
url(r'^search/?$', NepSearchView.as_view(), name='search_view')
urls.py 之前(没有自定义视图):
url(r'^search/', include('haystack.urls'))
views.py
class NepSearchView(SearchView):
def get_queryset(self):
queryset = super(NepSearchView, self).get_queryset()
if not self.request.user.is_authenticated and \
self.request.user.groups.filter(name='trustees').exists():
return queryset # (with some filter)
else:
return queryset
search.html:
{# ... #}
{% for result in page.object_list %}
{% if result.model_name == 'experiment' %}
{% include 'search/experiments.html' %}
{% endif %}
{% if result.model_name == 'study' %}
{% include 'search/studies.html' %}
{% endif %}
{% if result.model_name == 'group' %}
{% include 'search/groups.html' %}
{% endif %}
{% if result.model_name == 'experimentalprotocol' %}
{% include 'search/experimental_protocol.html' %}
{% endif %}
{# ... #}
好吧,事实是当使用默认的 Haystack SearchView
我得到了正确的匹配,而当引入 NepSearchView
时,page.object_list
是空的,我得到 No results found.
在模板中。
我已经 运行 manage.py rebuild_index
,在网络上进行了广泛搜索,但找不到任何可以解释我所缺少的东西。
查询集的 page.object_list 变量名似乎不存在。 尝试不带 'page' 前缀的 object_list。
而不是
{% for result in page.object_list %}
使用
{% for result in object_list %}
或者,您可以通过附加类似这样的内容在视图中提供自定义变量名称
context_object_name = 'haystack_objects'
并在模板中使用它
{% for result in haystack_objects %}