使用菜单扩展页面
Extending the page With menus
我为页面扩展页面创建了一个新字段,为此我遵循 documentation。
所以现在每个页面都有一个图像。
在我的例子中,我使用 this
在我的模板中显示子菜单
{% 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
的任何想法或示例
提前致谢!
我遇到了同样的问题 - 您想在菜单修饰符中获取页面的扩展对象,请参阅下面的示例:
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)
我正在使用延迟加载来确保除非模板请求,否则我不会加载页面(并可能命中数据库)。
在菜单模板 html 中,我有以下内容:
<div class="{{ child.pageobj.pagemenuiconextension.menu_navicon }}" style="height: 16px;">{{ child.get_menu_title }}</div>
您可以看到我使用的是表示菜单项 class 的简单字符串,但您可以使用任何字段。
我为页面扩展页面创建了一个新字段,为此我遵循 documentation。
所以现在每个页面都有一个图像。 在我的例子中,我使用 this
在我的模板中显示子菜单{% 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
的任何想法或示例
提前致谢!
我遇到了同样的问题 - 您想在菜单修饰符中获取页面的扩展对象,请参阅下面的示例:
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)
我正在使用延迟加载来确保除非模板请求,否则我不会加载页面(并可能命中数据库)。
在菜单模板 html 中,我有以下内容:
<div class="{{ child.pageobj.pagemenuiconextension.menu_navicon }}" style="height: 16px;">{{ child.get_menu_title }}</div>
您可以看到我使用的是表示菜单项 class 的简单字符串,但您可以使用任何字段。