我为页面扩展页面创建了一个新字段,我按照documentation进行了操作。
所以现在每个页面都有一个图像。 在我的情况下,我使用此
在我的模板中显示子菜单{% show_menu 2 100 100 100 "partials/menu_image.html" %}
所以在我的menu_image.html
中我会像这样显示我的菜单
<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>
我的问题是我想在菜单中显示每个页面的图像,因为我必须创建一个cms_menus.py
所以我有这个
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)
在这一点上我有点困惑,因为我不知道如何与我的菜单沟通,以显示这里的图像,documentation在这一点上是不明确的
我必须使用extension = page.iconextension
和child.extension.icon
任何想法或示例来查看
提前致谢!
答案 0 :(得分: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>
您可以看到我使用的是表示菜单项类的简单字符串,但您可以使用任何字段。