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

确保已安装Redisredis-py

在设置文件中添加如下内容,其中连接字符串为<;主机名>;:<;端口>;:<;数据库>;

AUTOCOMPLETE_REDIS_CONNECTION = 'localhost:6379:0'

配置solr

确保已安装Solrpysolr

将类似的内容添加到您的设置文件:

AUTOCOMPLETE_SOLR_CONNECTION = 'http://localhost:8080/solr/autocomplete-core/'

另外,如果你最终使用solr(我推荐!),则需要确保在solr架构中具有正确的字段定义。通过运行:

django-admin.py autocomplete_schema

这将在当前目录中删除名为schema.xml的文件。

安装

python setup.py安装

completion文件夹放在python路径上

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用setter将对象转换为java中的映射   java如何通过JQL直接找到多对多实体的交集?   java Android文本检查帮助   纸牌游戏中的java玩家顺序   java从活动A移动到活动B,再从活动B返回到活动A   java如何在GAE servlet中保存JSON文件以满足Android客户端的请求?   连接到本地主机上的SLiM服务器时发生java错误:8080   java是否可以使用setOnMarkerClickListener对for循环中创建的各种标记产生不同的结果?   检查数字是否为回文的java逻辑   java在两个独立的服务中是否存在数据同步模式?   java在组合框中选择ascendingorder时如何对元素列表进行排序   java如何在不更新旧表的情况下更新表中的字段并将其插入新表   javasos和return语句   java与示例安卓活动建立解析连接。错误:任务“:app:dexDebug”的执行失败   java Maven发布问题,带有代理授权的分叉部署过程,因为参数失败,需要407代理授权