在django中的使用
定义索引类
from haystack import indexes
# 导入你的模型类
from models import xxx
# 指定对于某个类的某些数据建立索引(模式 模型类名 + index)
class YourModelIndex(indexes.SearchIndex, indexes.indexable):
# 索引字段document=True 表示索引字段 use_template=True 表示根据表中的哪些 字段建立索引文件
text = indexes.CharField(document=True, use_template=True)
def get_model(self):
# 返回你的模型类
return xxx
# 建立索引的数据 这个方法返回什么就会根据哪些建立索引
def index_queryset(self, using=None):
return self.get_model().objects.all()
# 在templates 建立一个目录 固定的
search > indexes > 模型类名(app名) > 模型类小写_text.txt
# 如xxx模型在goods app下 模型类名叫 Goods
search > indexes > goods > goods _text.txt
在 goods _text.txt 文件中写入
# 指定根据表中的哪些字段建立索引数据
{{ object.name }} # Goods 表中如果有name 就表示根据 表中的name建立索引
{{ object.desc }} # 根据商品的简介建立索引
{{ object.foreignKey字段.detail }} # 根据 外建建立索引
生成索引
python3 manage.py rebuild_index
html:
<form method='get' action='/search'>
<input name='q' type='text' >
<input type='submit' value='提交' >
</form>
url 配制
urlpatterns = [
...
...
url(r'^search', include('haystack.urls'))
]
在 templates/search 下建立 一个search.html 文件 搜索的结果会传给这个模板
参数有:
query 搜索的关键字
page 当前 页的page对象
{% for item in page %}
{{ item.object }} // object 才是模型类的实例对象
{% endfor %}
paginator 分页paginator对象
浙公网安备 33010602011771号