1

我已将 Django cmsPage模型扩展为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

4

1 回答 1

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 }}

于 2013-05-31T08:15:12.113 回答