Django cms访问扩展属性 [英] Django cms accessing extended property

查看:57
本文介绍了Django cms访问扩展属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've extended the Django cms Page model into ExtendedPage model and added page_image to it. How can I now acces the page_image property in a template.

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

I'd like to access the page_image property for every child object in a navigation menu... creating a menu with images...

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

I've extended the admin and I have the field available for editing (adding the picture)

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

推荐答案

request.current_page.extended_fields.page_image


如果您使用<

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

should work if you are using < 2.4. In 2.4 they introduced a new two page system (published/draft) so you might need

request.current_page.publisher_draft.extended_fields.page_image

我通常编写一些中间件或模板处理器来处理此问题,而不是在模板中重复进行。像这样的东西:

I usually write some middleware or a template processor to handle this instead of doing it repetitively in the template. Something like:

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

这篇关于Django cms访问扩展属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆