gpt4 book ai didi

django - 具有可编辑链接元素的插件

转载 作者:行者123 更新时间:2023-12-02 08:39:13 28 4
gpt4 key购买 nike

在实现 Django CMS 网站时,我在链接管理(内部或外部)方面遇到了一些困难。在我的项目中,我有一个运算符(operator)经常使用的特定盒子插件。我在问题末尾添加了编辑对话框和框渲染的屏幕截图。

编辑对话框很好,但现在按钮只是一个字符字段。因此,缺少链接选择,无论是指向 Django CMS 内的页面还是指向外部 URL。我寻找链接字段,但直到现在我还是迷失了方向。

如何添加让运算符(operator)选择内部或外部链接的功能?

该插件由以下部分组成:

模型.py

from django.db import models
from cms.models.pluginmodel import CMSPlugin
from djangocms_text_ckeditor.fields import HTMLField

class CardPlugin(CMSPlugin):
title = models.CharField(max_length=256,default='')
description = HTMLField(configuration='CKEDITOR_SETTINGS',
default='')
button = models.CharField(max_length=256,default='')

def __str__(self):
return str(self.title)

cms_plugins.py

class CardCMSPlugin(CMSPluginBase):
model = CardPlugin
name = 'Card'
render_template = "card-default.html"

card-default.html

{% load cms_tags %}
<section class="card card--primary-light">
<div class="card__inner">
<div class="card__content">
<div class="card__text">
<h2 class="card__title">
{{ instance.title }}
</h2>
<p class="card__description">
{{ instance.description }}
</p>
</div>
{% if instance.button %}
<div class="card__buttons">
<a href="#0" class="button button--primary-inverse">{{ instance.button }}</a>
</div>
{% endif %}
</div>
</div>
</section>

渲染后的盒子

The rendered box

插件编辑对话框如下所示:

the plugin edit dialog

最佳答案

我建议考虑将 djangocms-link 插件添加为子插件。这是一个非常好的插件,可以链接到内部 CMS 页面或外部地址。这样您就可以从模型中删除 button 字段,并在模板中渲染子插件。

nested plugins 上的文档会是一本很好的读物。

你的插件定义会变成这样;

class ParentCMSPlugin(CMSPluginBase):
render_template = 'parent.html'
name = 'Parent'
model = ParentPlugin
allow_children = True
child_classes = ['LinkPlugin']

要渲染子插件,您可以使用模板执行此操作;

{% load cms_tags %}
<section class="card card--primary-light">
<div class="card__inner">
<div class="card__content">
<div class="card__text">
<h2 class="card__title">
{{ instance.title }}
</h2>
<p class="card__description">
{{ instance.description }}
</p>
</div>
{% for plugin in instance.child_plugin_instances %}
{% render_plugin plugin %}
{% endfor %}
</div>
</div>
</section>

这将使用子插件的默认渲染模板。如果默认值与样式等不匹配,您可以在模板中处理渲染,而不是使用 render_plugin 或子类 LinkPlugin 来按您想要的方式工作,或扩展它属性等

应该进一步考虑删除描述字段,转而使用 TextPlugin 作为子项,因为 CMS 文本插件可以在其自身内嵌套插件,并且是我总是使用的东西一个 HTMLField

此外,如果您正在开发连接到 CMS 的应用程序,请查看 PlaceholderFields它允许您在自己的模型中创建占位符来保存和使用可在 CMS 页面中使用的 CMS 插件。这对于新闻应用程序或博客风格内容等非常有用。

关于django - 具有可编辑链接元素的插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41996587/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com