0

我已经制作了一个额外的图像字段,如@Timmy O'Mahony 所示,关于 如何在 django-cms 中向页面添加一些额外的字段?(在 Django 管理面板中)

我想使用它的 reverse_id 从另一个页面调用这个图像字段,就像

{% page_attribute "extended_page_options.image" "my_page_reverse_id" %}

我需要自定义模板标签吗?我该怎么做?

我正在使用 django-cms 2.4.3 和 django 1.5.5

编辑:

模型.py

from django.db import models
from django.utils.translation import ugettext_lazy as _
from cms.models.pagemodel import Page
from filer.fields.image import FilerImageField

class ExtendedPage(models.Model):   
    page = models.ForeignKey(Page, unique=True, verbose_name=_("Page"), editable=False, related_name='extended_fields')
    image = FilerImageField(blank=True, null=True)
4

2 回答 2

1

在最近的一个项目中,我想我用 context_processor 解决了这个问题,如下所示:

from django.conf import settings

def page_extension(request):

    """Puts settings.DEBUG and the page_extension, if present and puts it into
    the context"""

    context = {'debug': settings.DEBUG}

    if request.current_page:
        page = request.current_page

        try:
            context.update({'page_extension': page.page_extension})
        except:
            try:
                context.update({'page_extension': page.publisher_public.page_extension})
            except:
                pass

    return context

在这种情况下,我还利用这个机会添加了 settings.DEBUG 的值,这当然是可选的。

然后,只需将其添加到您的设置文件中:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'path.to.above.code.page_extension',
)

然后,下一步就是访问模板中的值:

{% if page_extension and page_extension.my_page_property %}{{ page_extension.my_page_property }}{% endif %}
于 2014-05-08T13:44:32.167 回答
0

首先,如果您正在开始新项目,请选择django cms 3.0,它比以前的版本具有许多新的和令人兴奋的功能。

回到您的问题,转到包含实际图像字段的页面的高级设置并添加 id。然后在其他页面上这样做:

{% page_attribute "field_name" "my_page_reverse_id" %}
于 2014-05-08T11:55:49.740 回答