Skip to main content

一个 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)。

显示菜单

Yama 带有一个模板标签,用于将Menu对象呈现为无序的 HTML 列表。首先,您需要在模板中加载标签:

{% load yama %}

然后您可以使用{% menu_as_ul menu_var %}将菜单显示为列表。请注意,顶级 <ul> 标记不会输出,因此您可以控制列表的 id。这是一个示例输出:

<li class="first">
  <a ... class="a_first">Item 1</a>
</li>
<li class="li_dir">
  <a ... class="dir">Item 2</a>
  <ul>
    <li class="first">
      <a ... class="a_first">Item 2/1</a>
    </li>
    <li class="last">
      <a ... class="a_last">Item 2/2</a>
    </li>
  </ul>
</li>
<li class="last li_dir">
  <a ... class="a_last dir">Item 3</a>
  <ul>
    <li class="first">
      <a ... class="a_first">Item 3/1</a>
    </li>
    <li class="">
      <a ... class="">Item 3/2</a>
    </li>
    <li class="last">
      <a ... class="a_last">Item 3/3</a>
    </li>
  </ul>
</li>

您可以通过将关键字参数传递给标签来自定义显示的类,例如:

{% menu_as_ul top_menu dir_li_class="has_subitems" %}

默认映射如下:

DEFAULT_CLASSES = {
            'first_li_class' : "first",
            'first_a_class' : "a_first",
            'last_li_class' : "last",
            'last_a_class' : "a_last",
            'dir_li_class' : "li_dir",
            'dir_a_class' : "dir",
}

这有点不对称,但这些菜单开箱即用。

注意:目前,模板标签非常依赖数据库(每个菜单项至少访问数据库一次)。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

django-yama-0.2.tar.gz (37.5 kB 查看哈希)

已上传 source