2010年11月4日木曜日

Django-cmsでmenuのカスタマイズ

djangoのアプリで結果はpublicに表示したいけれど登録やリストその他のアプリURLはログインしたuserだけに見えるようにしたい。(Advanced SettingsのMenu visibilityをfor logged in users onlyに設定しちゃうとそのページも見えなくなる。)
たとえば、edit, list, enrollをhogeMenuとしてmenu.pyに登録して、一般に表示する部分はurl(r'$', 'showPublic'),とurls.pyの登録し
/hoge/                                 一般に表示する
/hoge/edit/                        ログインユーザーのみ
/hoge/list/                         ログインユーザーのみ
/hoge/enroll/                    ログインユーザーのみ
としたければ
from menus.base import Modifier

class skipHogeMenuWithoutLogin(Modifier):
    def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb):
        for node in nodes:
            if node.namespace == u'HogeMenu':
                if request.user.is_authenticated():
                    node.visible = True
                else:
                    node.visible = False
       
        return ret

menu_pool.register_modifier(skipHogeMenuWithoutLogin)
 をmenu.pyに追加すればよい

0 件のコメント:

コメントを投稿