Plugins DjangoCMS在多个自定义插件中填充模型的数据

Plugins DjangoCMS在多个自定义插件中填充模型的数据,plugins,content-management-system,django-cms,Plugins,Content Management System,Django Cms,我正在使用DjangoCMS进行网站开发。我需要在网站的多个地方使用公司的电话号码和电子邮件。所以我想用下面的模型编写一个自定义插件 from cms.models.pluginmodel import CMSPlugin from django.db import models # Create your models here. class ContactDetails(CMSPlugin): phone_number = models.CharField(max_length=

我正在使用DjangoCMS进行网站开发。我需要在网站的多个地方使用公司的电话号码和电子邮件。所以我想用下面的模型编写一个自定义插件

from cms.models.pluginmodel import CMSPlugin
from django.db import models

# Create your models here.

class ContactDetails(CMSPlugin):
    phone_number = models.CharField(max_length=50,default="000000000")
    email_id = models.CharField(max_length=50,default="Enter the Email")
    address = models.CharField(max_length=200,default="Enter Address")
以及下面的cms_plugins.py

from cms.plugin_pool import plugin_pool
from cms.models.pluginmodel import CMSPlugin
from django.utils.translation import ugettext_lazy as _
from .models import ContactDetails

@plugin_pool.register_plugin
class ContactDetailsPluginFooter(CMSPluginBase):
    model = ContactDetails
    name = _("Contact Plugin Footer")
    render_template = "contact_details_footer.html"
    cache = False

    def render(self, context, instance, placeholder):
        context = super(ContactDetailsPluginFooter, self).render(context,instance, placeholder)
        return context

@plugin_pool.register_plugin
class ContactDetailsPluginHeader(CMSPluginBase):
    model = ContactDetails
    name = _("Contact Plugin Header")
    render_template = "contact_details_header.html"
    cache = False

    def render(self, context, instance, placeholder):
        context = super(ContactDetailsPluginHeader, self).render(context,instance, placeholder)
        return context
我有如下模板

联系方式\u详情\u footer.html

<div class="container">
    <div class="row">
        <div class="col-sm-3 col-md-3">
            <div class="f-h-content">
                <h3>Call Us Now !</h3>
                <h2>{{instance.phone_number}}</h2>
                <p><a href="#">24/7 Available</a></p>
            </div>
        </div>
        <div class="col-sm-3 col-md-3">
            <div class="f-h-content">
                <h3>Send Us Message !</h3>
                <h2>{{instance.email_id}}</h2>
                <p><a href="#">24/7 Available</a></p>
            </div>
        </div>
        <div class="col-sm-6 col-md-6">
            <div class="f-h-content">
                <h3>Visit Our Dubai Office !</h3>
                <h2>{{instance.address}} ‬‬‬</h2>
                <p><a href="#">View Map</a></p>
            </div>
        </div>
    </div>
</div>
<div class="header-contact">
                       
    <ul>

        <li><span>Phone :</span> {{instance.phone_number}}</li>
        <li><span>Email :</span> {{instance.email_id}} </li>
        <li><a href="contact-us.html">Free Consultation</a></li>
    </ul>
</div>

现在给我们打电话!
{{实例.电话号码}

给我们发信息! {{instance.email_id}

访问我们的迪拜办事处! {{instance.address}‬‬‬

联系人详细信息\u header.html

<div class="container">
    <div class="row">
        <div class="col-sm-3 col-md-3">
            <div class="f-h-content">
                <h3>Call Us Now !</h3>
                <h2>{{instance.phone_number}}</h2>
                <p><a href="#">24/7 Available</a></p>
            </div>
        </div>
        <div class="col-sm-3 col-md-3">
            <div class="f-h-content">
                <h3>Send Us Message !</h3>
                <h2>{{instance.email_id}}</h2>
                <p><a href="#">24/7 Available</a></p>
            </div>
        </div>
        <div class="col-sm-6 col-md-6">
            <div class="f-h-content">
                <h3>Visit Our Dubai Office !</h3>
                <h2>{{instance.address}} ‬‬‬</h2>
                <p><a href="#">View Map</a></p>
            </div>
        </div>
    </div>
</div>
<div class="header-contact">
                       
    <ul>

        <li><span>Phone :</span> {{instance.phone_number}}</li>
        <li><span>Email :</span> {{instance.email_id}} </li>
        <li><a href="contact-us.html">Free Consultation</a></li>
    </ul>
</div>

  • 电话:{{实例.电话号码}
  • 电子邮件:{{instance.Email_id}

但在这里,当我每次添加相同的时,我必须添加电话和电子邮件id和地址。我应该怎么做才能让它输入一次并使用多个插件。

您提到的问题是故意的,因为每个插件都是存储在数据库中的唯一模型实例

我们可以创建一个独特的插件实例,链接到ContactDetails的单个实例。为此,我们必须创建一个外键关系,以便ContactDetails实例可以链接到许多插件

我们还可以使用Django管理内联线来创建ContactDetails并将其附加到插件

型号.py

从cms.models.pluginmodel导入CMSPlugin
从django.db导入模型
类联系人详细信息(models.Model):
电话号码=models.CharField(最大长度=50,默认值=“000000000”)
email\u id=models.CharField(最大长度=50,默认值=“输入电子邮件”)
address=models.CharField(最大长度=200,默认值=“输入地址”)
类别ContactDetailsPluginModel(CMSPlugin):
唯一的插件字段=models.CharField(最大长度=150)
联系人=models.ForeignKey(
“联系人”,null=True,blank=True,on_delete=models.CASCADE)
定义(自我):
将self.unique_返回到_plugin_字段
cms\u plugins.py


类别ContactDetailsLine(管理员StackedLine):
型号=联系人详细信息
@plugin\u pool.register\u插件
类别ContactDetailsPluginHeader(CMSPluginBase):
型号=ContactDetailsPluginModel
名称=(“联系人插件标题”)
render\u template=“contact\u details\u header.html”
cache=False
内联线=[
联系方式详情,
]
def呈现(自身、上下文、实例、占位符):
context=super(ContactDetailsPluginHeader,self).render(context,instance,placeholder)
返回上下文
您的模板现在可以使用以下关系进行访问:instance.contact.email\u id

联系人详细信息\u header.html

<div class="container">
    <div class="row">
        <div class="col-sm-3 col-md-3">
            <div class="f-h-content">
                <h3>Call Us Now !</h3>
                <h2>{{instance.phone_number}}</h2>
                <p><a href="#">24/7 Available</a></p>
            </div>
        </div>
        <div class="col-sm-3 col-md-3">
            <div class="f-h-content">
                <h3>Send Us Message !</h3>
                <h2>{{instance.email_id}}</h2>
                <p><a href="#">24/7 Available</a></p>
            </div>
        </div>
        <div class="col-sm-6 col-md-6">
            <div class="f-h-content">
                <h3>Visit Our Dubai Office !</h3>
                <h2>{{instance.address}} ‬‬‬</h2>
                <p><a href="#">View Map</a></p>
            </div>
        </div>
    </div>
</div>
<div class="header-contact">
                       
    <ul>

        <li><span>Phone :</span> {{instance.phone_number}}</li>
        <li><span>Email :</span> {{instance.email_id}} </li>
        <li><a href="contact-us.html">Free Consultation</a></li>
    </ul>
</div>

  • 电话:{{instance.contact.Phone_number}
  • 电子邮件:{{instance.contact.Email_id}