django应用程序的自动完成
django-completion的Python项目详细描述
django应用程序的自动完成功能
支持以下后端:
- solr
- 数据库(使用like)
- redis(相当实验性)
用法遵循典型的django registration-y模式:
from django.db import models from completion import site class Blog(models.Model): title = models.CharField(max_length=255) pub_date = models.DateTimeField() content = models.TextField() published = models.BooleanField(default=True) def get_absolute_url(self): return reverse('blog_detail', args=[self.pk]) class BlogProvider(AutocompleteProvider): def get_title(self, obj): return obj.title def get_pub_date(self, obj): return datetime.datetime(2010, 1, 1) def get_data(self, obj): return {'stored_title': obj.title, 'url': obj.get_absolute_url()} def get_queryset(self): return self.model._default_manager.filter(published=True) site.register(Blog, BlogProvider)
博客模型现在可以自动完成,但必须先存储对象,然后才能返回:
>>> from completion import site >>> site.store_providers() >>> site.suggest('tes') [ {u'stored_title': u'testing python', u'url': u'/blogs/1/'}, {u'stored_title': u'testing python code', u'url': u'/blogs/3/'}, {u'stored_title': u'web testing python', u'url': u'/blogs/2/'}, {u'stored_title': u'unit tests with python', u'url': u'/blogs/4/'}, ] >>> site.suggest('testing') [ {u'stored_title': u'testing python', u'url': u'/blogs/1/'}, {u'stored_title': u'testing python code', u'url': u'/blogs/3/'}, {u'stored_title': u'web testing python', u'url': u'/blogs/2/'}, ]
可以随时从索引中添加或删除对象:
>>> site.store_object(some_blog_instance) >>> site.remove_object(some_other_obj)
如果在自动完成索引中有多种类型的对象,则可以限制 通过将“模型”传递给建议方法,将结果传递给certian类型:
>>> site.suggest('python', models=[Blog, Photo])
配置
“自动完成”后端设置允许您指定要用于自动完成的后端。选项是:
- completion.backends.db_backend.databaseautocomplete
- completion.backends.redis_backend.redisautocomplete
- completion.backends.solr_backend.solrautoComplete
配置redis
在设置文件中添加如下内容,其中连接字符串为<;主机名>;:<;端口>;:<;数据库>;
AUTOCOMPLETE_REDIS_CONNECTION = 'localhost:6379:0'
安装
python setup.py安装
或 将completion文件夹放在python路径上