django菜单应用程序

django-yama的Python项目详细描述


简介

django yama(又一个菜单应用)是一个相当通用的菜单 申请Django 1.1(及以上)。它支持层次结构 (树结构)任意深度的菜单,并使您能够创建 菜单链接到来自其他django应用程序的模型对象和视图,如 以及外部URL。

应用程序的管理部分是完全定制的,使用jquery 提供简单的用户界面。界面大部分被撕破了 从受django-page-cms影响的^w^w^w关闭。

在前端部署django yama的最佳方式可能是 通过自定义模板上下文处理器。模板标记 它可以将菜单呈现为无序的HTML列表。

安装和配置

这个包现在可以通过pypi获得。这取决于 django-mptt对于its 层次结构,显然是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翻译, 您需要为django的^{tt6}提供一个条目$ 在您的urls.py中查看。通常情况下,看起来 例如:

    (r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog'),
    
  • 如果您不打算链接到对象或视图(即计划输入 网址直接),你很好去。否则,你得告诉我 Yama要链接到的模型和视图。您可以编辑 settings.py在yama目录中,或者在站点范围内编辑 settings.py并调整以下两个设置:

    • YAMA_MODELS,这是一本字典。表中的键是成对的 ('app_label', 'model name'), and values provide filters, which allow only a subset of model instances to be used as menu targets. Values can either be None, which indicates that no filtering is to be applied, or ``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 %}将菜单显示为 一份清单。请注意,顶级标记不输出,因此您可以 控制列表的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",
}

这有点不均衡,但它可以与these menus一起使用。

注意:当前,模板标记非常重于数据库(命中 每个菜单项至少一次数据库)。

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

推荐PyPI第三方库


热门话题
创建大十进制对象时发生java错误   java为什么netty日志不显示正确的类和包信息   java AWS Lambda,如何正确实例化AmazonHttpClient?   java如何防止控制器中的Put API受到CheckMarx扫描中反映的XSS攻击?   java如何在Android上滚动时更改图像   java为什么通知没有显示在API 28中?   java分配问题OCJP;为什么我不能将int传递给short?   java在非静态内部类中使用泛型   正则表达式从Java字符串中提取word中指定的日期值   java Primefaces selectManyCheckbox未在bean中填充   美化javaxml输出   java带2个箭头的按位移位和带3个箭头的按位移位有什么区别?   使用JAXB和SpringMVC进行java XML绑定   Java高级功能weblogic中的Web服务   java IIN插入HQL中   缺少java PrintCommandListener   java如何模拟SpringBean的自动连接列表?   javasocket服务器、客户端检测服务器已死亡   将按钮添加到使用java图形的contentPane   java EJB3在第一次运行时调用计时器超时时出错