我尝试配置Haystack,但是当我在search.html输入内容时,它会说"没有找到结果" 我做了重建索引,所有帖子都被编入索引。 我使用基于类的视图,并认为我忘记了views.py。 谢谢你的帮助。
我的代码:
models.py
class Post(models.Model):
title = models.CharField(max_length=255) # title of post
datetime = models.DateTimeField(u'Дата публикации') # date of post
content = models.TextField(max_length=10000) # text of post
views.py
class MySearchView(SearchView):
template_name = "blog/search.html"
def get_queryset(self):
queryset = super(MySearchView, self).get_queryset()
return queryset.filter(pub_date__gte=date(2015, 1, 1))
def get_context_data(self, *args, **kwargs):
context = super(MySearchView, self).get_context_data(*args, **kwargs)
return context
search.hmtl
<form type="get" action=".">
<input type="text" name="q">
<button type="submit">Search</button>
</form>
{% if query %}
{% for post in posts %}
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
{% empty %}
<p>No results found.</p>
{% endfor %}
{% endif %}
search_indexes.py
class PostIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
content = indexes.CharField(model_attr='content')
def get_model(self):
return Post
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.filter(datetime__lte=timezone.now())
post_text.txt
{{ object.title }}
{{ object.content }}
我的来源。它有帮助
答案 0 :(得分:0)
老问题,但对于谁 - 遇到同样的问题,请注意Haystack文档似乎有点过时,此时(2018年)。这是一个解决方案。
Haystack的基于类的SearchView继承自Django的MultipleObjectMixin,它提供名为&#39; object_list&#39;的模板变量中的项目列表。
另外,正如你可以在Haystack documentation中看到的那样,page_obj.object_list实际上是一个SearchResult对象列表而不是单个模型。
所以你的模板应该是这样的:
{% if query %}
{% for result in object_list %}
<h1>{{ result.object.title }}</h1>
<p>{{ result.object.content }}</p>
{% empty %}
<p>No results found.</p>
{% endfor %}
{% endif %}