Django cms访问扩展属性

时间:2013-05-31 04:11:30

标签: django django-cms

我已将Django cms Page模型扩展为ExtendedPage模型并向其添加了page_image。 我现在如何访问模板中的page_image属性。

我想在导航菜单中访问每个子对象的page_image属性...创建带图像的菜单...

我已经扩展了管理员,我可以使用该字段进行编辑(添加图片)

from django.db import models
from django.utils.translation import ugettext_lazy as _
from cms.models.pagemodel import Page
from django.conf import settings

class ExtendedPage(models.Model):   
    page = models.OneToOneField(Page, unique=True, verbose_name=_("Page"), editable=False, related_name='extended_fields')
    page_image = models.ImageField(upload_to=settings.MEDIA_ROOT, verbose_name=_("Page image"), blank=True)

谢谢!

BR

1 个答案:

答案 0 :(得分:3)

request.current_page.extended_fields.page_image
如果您使用<

应该可以工作2.4。在2.4中,他们引入了一个新的两页系统(已发布/草稿),因此您可能需要

request.current_page.publisher_draft.extended_fields.page_image

我经常编写一些中间件或模板处理器来处理这个问题,而不是在模板中重复执行。类似的东西:

class PageOptions(object):
    def process_request(self, request):
        request.options = dict()
        if not request.options and request.current_page:
            extended_fields = None
            try:
                extended_fields = request.current_page.extended_fields
            except:
                try:
                    custom_settings = request.current_page.publisher_draft.extended_fields
                except:
                    pass
            if extended_fields:
                for field in extended_fields._meta.fields:
                    request.options[field.name] = getattr(extended_fields, field.name)
        return None

将允许您简单地执行{{ request.options.page_image }}