TurboGears2应用标签支持
项目描述
关于Tagging
tgext.tagging是一个允许快速将标签添加到任何项目的TurboGears2库,它管理标签、标签云和小部件以列出、删除和添加实体标签。
安装
tgext.tagging可以从pypi或bitbucket安装
pip install tgext.tagging
应该对大多数用户有效
启用标签管理
对于TurboGears 2.2+,建议使用tgext.pluggables
from tgext.pluggable import plug plug(base_config, 'tgext.tagging')
对于旧版本,编辑model/__init__.py
并添加以下行
import tgext.tagging Tag, Tagging = tgext.tagging.setup_model()
大多数用于管理标签的工具都由Tagging类公开
Tag.lookup(tag_name) -> 返回给定标签名称的Tag实例
Tag.lookup_list(comma_separated_tags) -> 返回标签列表中每个条目的标签实例。
Tagging.items_for_tags(Model, comma_separated_tags) -> 返回具有给定标签的项目列表
Tagging.tag_cloud_for_object(item) -> 返回给定对象的标签列表
Tagging.tag_cloud_for_set(Model, items=None) -> 返回给定项目集的标签云。如果传递了项目列表,则将检索给定列表的标签,否则将检索给定模型的所有项目。
Tagging.tag_cloud_for_user(user, Model=None) -> 返回给定用户设置的标签。如果传递了任何模型,则将仅检索该模型的标签。
Tagging.add_tags(item, comma_separated_tags) -> 将给定的标签添加到项目
Tagging.del_tags(item, comma_separated_tags) -> 从项目删除给定的标签
Tagging.set_tags(item, comma_separated_tags) -> 用新的列表替换项目的所有标签
标签控制器
tgext.tagging提供了一个用于管理标签的控制器。使用以下代码在您的项目中启用它:
from tgext.tagging.controllers import TaggingController class RootController(BaseController): tagging = TaggingController(model=Group, session=DBSession, allow_edit=None)
您可以启用多个TaggingController,每个为您的应用程序中可用的每个模型一个。参数model表示要管理标签的模型对象,session是用于执行查询的sqlalchemy会话,而allow_edit是repoze.what谓词,用于检查是否显示编辑功能。
控制器提供tags、add、remove、search操作
/tags/id -> 可由jQuery.load加载的局部视图,显示给定对象的标签列表以及添加/删除标签的表单。
/add/id?tags=tag1,tag2,tag3 -> 允许向项目添加一个或多个标签
/remove/id?tags=tag1,tag2 -> 允许从项目删除一个或多个标签
/search?tags=tag1,tag -> 搜索具有给定标签的项目,如果可用,将使用Model.tagging_display方法来显示结果。否则,执行str(Model)。
标签小部件
tgext.tagging提供了一些用于管理标签的小部件。tgext.tagging.widgets.TagList和tgext.tagging.widget.TagCloud被提供。两者在构造时都接受一个tagging_url参数,该参数指向小部件可以用来管理标签的标签控制器URL。默认情况下,它指向/tagging。TagList小部件还接受一个editmode参数,可以指定是否显示添加和删除标签的控制。
在渲染时,TagList接受一个对象作为参数,将显示给定对象的标签列表,而TagCloud接受由Tagging.tag_cloud_for_object、Tagging.tag_cloud_for_set或Tagging.tag_cloud_for_user返回的标签云,并将显示一个带权重的标签云。
与SQLITE一起使用
tgext.tagging严重依赖于SAVEPOINT来正确处理标签的唯一性。默认的SQLite行为与savepoints不兼容,需要一些额外的更改,而这些更改在用MySQL或Postgres工作时是不需要的。
通常,为了使SQLite和zope.sqlalchemy能够正确运行,在使用模型之前需要以下代码:
from sqlalchemy import event @event.listens_for(engine, "connect") def do_connect(dbapi_connection, connection_record): # Disable SQLITE automatic transactions dbapi_connection.isolation_level = None @event.listens_for(engine, "begin") def do_begin(conn): # Manually emit SQLITE transaction begin conn.execute("BEGIN") # Tell zope.sqlalchemy that SQLITE now supports SAVEPOINT from zope.sqlalchemy import datamanager datamanager.NO_SAVEPOINT_SUPPORT = set()
忘记放置此代码通常会导致以下错误:
(OperationalError) no such savepoint: sa_savepoint_3 u'ROLLBACK TO SAVEPOINT sa_savepoint_3' ()
或
TypeError: ('Savepoints unsupported', <zope.sqlalchemy.datamanager.SessionDataManager object at 0x7fe9feae45d0>)
有关详细信息,请参阅SQLite Serializable。
项目详情
tgext.tagging-0.3.0.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 7160473b4a99d91d094f0f16ccd9512a3150a979a274f956e4ce3e251faea193 |
|
MD5 | c9a02b5a0558e97561a285fc9d89f21d |
|
BLAKE2b-256 | 639d2e2b9b44e9b32c0fb7917dff3474e1c188ae12bf8de03b73241ad3293e3f |