2016-10-14 5 views
0

私はページを拡張するページの新しいフィールドを作成し、そのためにdocumentationに従います。ページをメニューで拡大

これで各ページに画像が表示されるようになりました。 は、私の場合、私はここに、この

<ul> 
    {% for child in children %} 
    <li> 
     <div class="project_item"> 
     <a href="{{ child.get_absolute_url }}"> 
     {% if request.current_page %} 
      <img src="{% static request.current_page.iconextension.image.url %}"> 
     {% endif %} 
     <div class="title_project">{{ child.get_menu_title }}</div> 
     <div class="description_project"> 
      {{ request.current_page.PageDescriptionExtension.description_page }} 
     </div> 
     </a> 
     </div> 

    </li> 
    {% endfor %} 
</ul> 

私の問題は、私はそれぞれの画像を表示したいということであるようなので、私のmenu_image.htmlに私は私のメニューを表示し、この

{% show_menu 2 100 100 100 "partials/menu_image.html" %} 

を使用して、私のテンプレートでサブメニューを表示しますここではメニューのページ、そのために私はので、私は、私は少し混乱し、BECAを持って、この時点でこの

from menus.base import Modifier 
from menus.menu_pool import menu_pool 
from cms.models import Page 

class MyMode(Modifier): 
    """ 
    """ 
    def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb): 
     # if the menu is not yet cut, don't do anything 
     if post_cut: 
      return nodes 
     # otherwise loop over the nodes 
     for node in nodes: 
      # does this node represent a Page? 
      if node.attr["is_page"]: 
       # if so, put its changed_by attribute on the node 

       node.attr["changed_by"] = Page.objects.get(id=node.id).changed_by 
     return nodes 

menu_pool.register_modifier(MyMode) 

を持ってcms_menus.pyを作成する必要があります私はここに画像を表示するために私のメニューでこれを通信する方法がわからない使用して、この時点でdocumentationは私が

感謝を見てextension = page.iconextensionchild.extension.icon任意のアイデアや例を使用する必要があり、明確な

ではありません前進!

私は同じ問題に直面してきました

答えて

1

- あなたは以下の私の例を参照してください、メニュー修飾子にページの拡張オブジェクトを取得したい:

from menus.base import Modifier 
from menus.menu_pool import menu_pool 
from raven.contrib.django.raven_compat.models import client 

from cms.models import Page 

class MenuModifier(Modifier): 
    """ 
    Injects page object into menus to be able to access page icons 
    """ 
    def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb): 
     # if the menu is not yet cut, don't do anything 
     if post_cut: 
      return nodes 

     for node in nodes: 

      try: 
       if "is_page" in node.attr and node.attr["is_page"]: 

        class LazyPage(object): 
         id = node.id 
         page = None 
         def pagemenuiconextension(self): 
          try: 
           if not self.page: 
            self.page = Page.objects.get(id=self.id) 
           return self.page.pagemenuiconextension 
          except AttributeError, ae: 
           # print ae 
           return False 
          except Exception, e: 
           print e 
           client.captureException() 

        node.pageobj = LazyPage() 

       else: 
        pass 
      except Exception, e: 
       client.captureException() 

     return nodes 

menu_pool.register_modifier(MenuModifier) 

私はページをロードしないように遅延ロードを使用しています(そして潜在的にDBにヒットします)。メニューテンプレートのHTMLで

、私は、次があります。

<div class="{{ child.pageobj.pagemenuiconextension.menu_navicon }}" style="height: 16px;">{{ child.get_menu_title }}</div> 

あなたは、私がメニュー項目のクラスを表す単純な文字列を使用していますが、あなたが任意のフィールドを使用することができます見ることができます。

関連する問題