django alphafilter提供了一个用于按字母顺序筛选的管理小部件,其工作方式类似于日期层次结构和模板标记,可在其他地方使用。
django-alphafilter的Python项目详细描述
django alphafilter的设计与django的默认date_hierarchyadmin过滤器类似。它将一个可点击的字母表放在与日期层次结构相同的位置-在结果列表的顶部。
在1.0中的更改 *仅支持django 1.9、1.10和1.11 *支持Python2.7和3.6 *添加了毒性测试配置
0.7中的更改:
- 在模板标记中添加了一个strip_params参数以去掉外部查询参数。
- Django 1.5兼容。
- 回到django 1.4中以前的检索字母的方法,因为django的聚合中存在错误。
- 修复了URL中“&;”的编码。
- 向上下文添加了unfiltered_queryset(感谢ales zabala alava:https://github.com/shagi)
0.6中的更改:
- 切换到django querysets检索字母。(多亏了ales zabala alava:https://github.com/shagi)
- Django 1.4兼容
0.5中的更改:
- 添加了一个新的模板标记,以使用queryset和field以及可选的指定模板在普通模板中呈现字母表过滤器。
0.4中的更改:
- 添加了指定第三方应用程序以应用字母表筛选器而无需修改该代码(例如django.contrib.auth)的功能。为此使用ALPHAFILTER_ADMIN_FIELDS设置。
- 现在包括文档!
0.3中的更改:
- ModelAdmin类现在可以指定自己的DEFAULT_ALPHABET来使用,而不是全局设置。
- DEFAULT_ALPHABET现在可以是可调用的
安装
最简单的方法是使用pip
pip install django-alphafilter
如果下载了源代码,可以通过运行setup.py脚本来安装它:
cd /path/to/django-alphafilter/ python setup.py install
将'alphafilter'添加到项目的settings.py文件中,这样django将找到模板和模板标记。
默认字母表
默认字母表是管理员中显示的字符列表,即使没有该字符的数据。由于有数据,字母表中的字母被启用。不在默认字母表中的任何字符,但存在于数据中,都是动态添加的。
由于有关按语言设计正确字母表的问题,默认字母表是名为DEFAULT_ALPHABET的设置。默认设置是ascii字母和数字。可以将DEFAULT_ALPHABET设置为字符串、列表、元组或可调用。
如果您只使用ascii字符,则不使用数字:
DEFAULT_ALPHABET = u'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
对于德语字母表:
DEFAULT_ALPHABET = u'0123456789A\xc4BCDEFGHIJKLMNO\xd6PQRS\xdfTU\xdcVWXYZ'
对于冰岛字母表:
DEFAULT_ALPHABET = u'0123456789A\xc1BD\xd0E\xc9FGHI\xcdJKLMNO\xd3PRSTU\xdaVXY\xdd\xde\xd6'
通过在ModelAdmin类中添加DEFAULT_ALPHABET属性,可以逐个模型覆盖DEFAULT_ALPHABET,如下所示:
class TestNameAdmin(admin.ModelAdmin): model = TestName alphabet_filter = 'sorted_name' # A blank string only shows the characters in the database DEFAULT_ALPHABET = u''
字母表的顺序与输入的顺序不同,它是通过python的list sort方法排序的。
在型号上使用字母表过滤器
在模型的admin.py中将alphabet_filter设置为字符字段的名称。例如:
alphabet_filter = 'name'
您还必须为模型(或应用程序)创建一个模板,该模板将覆盖管理员的change_list.html模板。
在项目的模板目录中,需要创建一个admin目录,以及一个具有应用程序名称和模型名称(可选)的目录。例如,如果在名为cooltags的应用程序的Tag模型上添加筛选器,目录结构将如下所示:
MyProject templates admin cooltags tag
创建一个名为change_list.html的文档,并将其放在应用程序(templates/admin/cooltags)目录中,使其适用于该应用程序中的每个模型,或将其放在模型目录(templates/admin/cooltags/tag)中,使其仅适用于该模型。
change_list.html文档只能包含一行:
{% extends "alphafilter/change_list.html" %}
注意
您不能将此模板放在admin目录中,因为它会导致继承的无限循环。