Python 自定义视图不显示Django Haystack中使用弹性搜索的结果
我开始使用Django Haystack和Elasticsearch 好的,直到我开始按照中的简单示例创建自定义视图 搜索索引。py:Python 自定义视图不显示Django Haystack中使用弹性搜索的结果,python,django,elasticsearch,django-views,django-haystack,Python,Django,elasticsearch,Django Views,Django Haystack,我开始使用Django Haystack和Elasticsearch 好的,直到我开始按照中的简单示例创建自定义视图 搜索索引。py: class ExperimentIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) owner = indexes.CharField(model_attr='owner') d
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()
url(r'^search/?$', NepSearchView.as_view(), name='search_view')
url(r'^search/', include('haystack.urls'))
{# ... #}
{% 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 %}
{# ... #}
url.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()
url(r'^search/?$', NepSearchView.as_view(), name='search_view')
url(r'^search/', include('haystack.urls'))
{# ... #}
{% 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 %}
{# ... #}
url.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()
url(r'^search/?$', NepSearchView.as_view(), name='search_view')
url(r'^search/', include('haystack.urls'))
{# ... #}
{% 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 %}
{# ... #}
视图.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:
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()
url(r'^search/?$', NepSearchView.as_view(), name='search_view')
url(r'^search/', include('haystack.urls'))
{# ... #}
{% 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 %}
{# ... #}
事实上,当使用默认HaystackSearchView
时,我找到了正确的匹配项,而在引入NepSearchView
时,页面。对象列表
为空,我在模板中找不到任何结果。
我已经运行了
manage.py rebuild\u index
,在web上进行了大量搜索,但找不到任何可以解释我所缺少内容的内容。查询集的page.object\u列表变量名似乎不存在。
请尝试不带“页面”前缀的对象列表
而不是
{% for result in page.object_list %}
使用
或者,您也可以在视图中添加如下内容,以提供自定义变量名
context_object_name = 'haystack_objects'
并在模板中使用它
{% for result in haystack_objects %}
很晚了,但我想我会问:你是如何着手诊断这个问题的?我挣扎了几个小时,精确地匹配了文档中的教程,尽管仍然使用默认模板
page.object\u list
。我很想知道今后如何避免类似的头痛。