一个 Django 的菜单应用程序
项目描述
介绍
Django Yama (Yet Another Menuing App) 是一个相当通用的 Django 1.1(及更高版本)的菜单应用程序。它支持任意深度的分层(树结构)菜单,并使您能够创建菜单链接到来自其他 Django 应用程序的模型对象和视图,以及外部 URL。
应用程序的管理部分是完全定制的,利用 jQuery 提供简单的用户界面。该界面主要是从受django-page-cms影响的^W ^W ^W 中窃取的。
在前端部署 django-yama 的最佳方式可能是使用自定义模板上下文处理器。包含一个模板标签,它可以将菜单呈现为无序列的 HTML 列表。
安装和配置
该软件包现在可通过 PyPI 获得。它的层次结构依赖于 django-mptt,显然也依赖于 Django 本身,因此您还需要安装它们。
或者,您可以从 Mercurial 存储库中查看最新版本:
hg clone http://django-yama.googlecode.com/hg django-yama
安装 Yama 后,您需要执行一些常规步骤:
将“yama”添加到您的INSTALLED_APPS
要创建必要的数据库表,请运行python manage.py syncdb;或者,如果您使用 South,请运行python manage.py migrate yama。
将媒体目录的内容复制到您的MEDIA_ROOT。您还可以使用django-staticfiles。
还有一些更具体的:
由于 Yama 使用 Django 的机器进行 Javascript 翻译,因此您需要在urls.py中为 Django 的javascript_catalog 视图提供一个条目。通常,这看起来像:
(r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog'),
如果您不打算链接到对象或视图(即计划直接输入 URL),那么您就可以开始了。否则,您需要告诉 Yama 您希望链接到哪些模型和视图。您可以编辑 yama 目录中的 settings.py ,或编辑站点范围的settings.py并调整以下几个设置:
YAMA_MODELS,这是一个字典。键是 ('app_label', 'model name') 形式的对,值提供过滤器,仅允许将模型实例的子集用作菜单目标。值可以是 None,表示不应用过滤,也可以是 ``Q对象,表示所需的过滤操作。或者,值也可以是返回Q对象的可调用对象;这些可调用对象被赋予一个参数,一个HttpRequest对象。事实上,callables 是您在站点范围内过滤的唯一选项settings.py,因为在顶层导入Q对象会导致循环导入。这是一个例子:
def user_list(request): from django.db.models import Q return Q(is_active=True) YAMA_MODELS = {('auth', 'User') : user_list}所有给定的模型都应该实现 get_absolute_url方法。
YAMA_VIEWS,这是一个对的序列。每对都采用('reverse-able name', 'display name')的形式。例子:
YAMA_VIEWS = ( ('blog-index', _('Blog index')), ('blog.views.archive', _('Blog archive')), )目前,预计视图不会接受任何参数(除了request)。