django的拖放菜单管理器。

django-menuz的Python项目详细描述


django menuz是django的另一个菜单应用程序。

它的灵感主要来自wordpress中的菜单创建。Django Menuz提供 在指定位置调用菜单的模板标记。

由于它的拖放功能,它很容易重新排序菜单项的位置。

安装和使用:

一旦通过setup.py安装,就可以轻松安装或pip。

  • menuz添加到INSTALLED_APPSdjangosettings.py文件中。

  • 请确保django.core.context_processors.request在您的TEMPLATE_CONTEXT_PROCESSORS中可用。

  • 还可以将下面的url配置添加到项目url配置中。

    url(r'', include('menuz.urls')),
    
  • 通过添加AVAILABLE_MENUS参数,在项目settings.py中注册所有可用的菜单位置。示例:

    AVAILABLE_MENUS = (
    {
        'id': 'top_menu',
        'title': _('Top Menu'),
        'type': 'UL',          #optional, default UL. alternative 'OL'
        'class': 'someclass',  #optional, output: <ul class="ul_toplevel someclass">
        'before_link': 'BBB',  #optional, can be text or html tag. output: <li>BBB<a href="...">Title</a></li>
        'after_link': 'AAA',   #optional, can be text or html tag. output: <li><a href="...">Title</a>AAA</li>
    },
    
    {
        'id': 'footer_menu',
        'title': _('Footer Menu'),
        'type': 'UL',
        'class': None,
    },
    
    {
        'id': 'left_menu',
        'title': _('Left Menu'),
        'type': 'OL',
        'class': None,
    },
    )
    
  • 如果您的应用程序中很少有fix/static url,并且希望将其包含在菜单项中,请在项目中添加AVAILABLE_INNERLINKS

    AVAILABLE_INNERLINKS = (
        ('/this_page/', 'This Page'),
        ('/that_page/', 'That Page'),
        ('/categories/', 'Categories Page'),
        ('/collections/', 'Collections Page'),
        ...
        ...
        etc.
    )
    
  • 以上链接必须是入站链接,而不是到其他网站的链接(出站链接)。

  • 对于出站链接菜单,请在菜单创建管理页中使用自定义链接。

型号菜单

  • 要基于django模型项创建菜单,只需在application directory中创建menu.py,这与application url.py处于同一级别,并按照以下示例(文件:menu.py)注册我们的模型。

    # file: menu.py
    from menuz.registry import menuz
    from catalog.models import Product
    
    menuz.register(Product)
    
  • 或者,如果您想在将其注册到menuz之前进行一些筛选,请执行以下操作(文件:menu.py)。

    from menuz.registry import menuz
    from catalog.models import Product
    
    def active_product():
        return Product.objects.filter(active=True)
    
    menuz.register(Product, custom_source=active_product)
    

我们注册了额外的回调,当menuz在管理区显示可选择的菜单项时调用它, 这样,菜单项选择器将不显示所有可用的产品,而只显示活动的产品。

重要提示:

要使模型菜单项正确链接到其url,您的模型必须使用get_absolute_url()函数。因为这是检索对象url的唯一标准方法,至少对于django menuz是这样。

示例:

from django.db import models

class Page(models.Model):
    title = models.CharField(max_length=50)
    slug = models.SlugField()

    @models.permalink
    def get_absolute_url(self):
        return ('some_page', None, {'slug': self.slug})

调用模板中的菜单项

example将菜单项调用为html列表

{% load 'menuz_tags' %}
{% list_menu 'top_menu' %}

example调用菜单项作为模板上下文

此实现不支持分层菜单,如果需要此功能,请使用list_menu标记。

{% load menuz_tags %}
{% get_menu top_menu as tmenu %}

<h2>{{tmenu_title}}</h2>
<ul>
    {% for item in tmenu %}
    <li><a href="{{item.url}}">{{item.title}}</a></li>
    {% endfor %}
</ul>

请注意,在上面的示例中,将菜单分配给名为somevar的变量时,可以通过在变量名后面添加_title后缀来显示菜单标题。

在上述情况下,变量名为tmenu,标题将在名为tmenu_title的变量中可用。

测试

如果您想运行此应用程序的测试,您需要首先安装django nosehttps://pypi.python.org/pypi/django-nose(请参阅django nose文档了解如何安装)。

然后通过运行下面的命令运行测试:

python manage.py test menuz

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

推荐PyPI第三方库


热门话题
java如何将外部库(LIB)集成到grails项目中?   java 安卓:progressTintMode、安卓:secondaryProgressTintMode和安卓:progressDrawable做什么?   java获得了启动播放器的精确方向   java如何在布局/样式XML中设置状态栏着色颜色?   Java中的图形游戏未显示   java如何在WebSphere8.5.5中的我的JAAS自定义登录模块中使用SAML令牌属性值   使用jackson spring API解析嵌套json   java如何从用户请求中获取用户代理?   Netbeans 6.8中的java UI控件定位   java显示listgrid中两个表中的数据   java Google Cloud Bigtable客户端连接池   Vert中的java更改日志级别。通过添加一个配置文件   java调用构造函数是否意味着创建实例?   java getFrom()[0])中[0]用于获取邮件发件人地址的用法是什么   “继续”标志的java Gradle属性?   jakarta ee如何在java ee中创建GUID   java不兼容类型:无法将int转换为整数   java需要借助DefaultHandler的characters函数将XML数据读入安卓应用程序   java mapstruct将方法应用于列表中的所有对象