如何在django-cms中的页面中添加一些额外的字段? (在django管理面板中) [英] How to add some extra fields to the page in django-cms? (in django admin panel)

查看:132
本文介绍了如何在django-cms中的页面中添加一些额外的字段? (在django管理面板中)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在django-cms中的页面中添加一些额外的字段(在django管理面板中)。最简单的做法如何?

I would like to add some extra fields to pages in django-cms (in django admin panel). How do this in the simplest way?

推荐答案

创建一个新的应用程序(称为 extended_cms 或某些东西) models.py 创建以下内容:

Create a new app (called extended_cms or something) and in models.py create the following:

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

class ExtendedPage(models.Model):   
    page = models.ForeignKey(Page, unique=True, verbose_name=_("Page"), editable=False, related_name='extended_fields')
    my_extra_field = models.CharField(...)

然后创建一个 admin.py

from models import ExtendedPage
from cms.admin.pageadmin import PageAdmin
from cms.models.pagemodel import Page
from django.contrib import admin

class ExtendedPageAdmin(admin.StackedInline):
    model = ExtendedPage
    can_delete = False

PageAdmin.inlines.append(ExtendedPageAdmin)
try:
    admin.site.unregister(Page)
except:
    pass
admin.site.register(Page, PageAdmin)

这将添加您的扩展模型作为您创建的任何页面的内联。访问扩展模型设计的最简单的方法是创建一个上下文处理器:

which will add your extended model to as an inline to any page you create. The easiest way to access the extended model setttings, is to create a context processor:

from django.core.cache import cache
from django.contrib.sites.models import Site

from models import ExtendedPage

def extended_page_options(request):
    cls = ExtendedPage
    extended_page_options = None    
    try:
        extended_page_options = request.current_page.extended_fields.all()[0]
    except:
        pass
    return {
        'extended_page_options' : extended_page_options,
    }

现在,您可以访问您当前的额外选项在您的模板中使用 {{extended_pa​​ge_options.my_extra_field}} 的页面

and now you have access to your extra options for the current page using {{ extended_page_options.my_extra_field }} in your templates

本质上您正在做的是创建一个单独的模型使用用于每个CMS页面的内联的额外设置。我以前从博客中得到这个,如果我能发现我会发布。

Essentially what you are doing is creating a separate model with extra settings that is used as an inline for every CMS Page. I got this from a blog post previously so if I can find that I'll post it.

编辑

这是博客文章: http://ilian.ini.org/extending-django-cms-page-model/

这篇关于如何在django-cms中的页面中添加一些额外的字段? (在django管理面板中)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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