在实现Django CMS站点时,我有点卡在链接管理(内部或外部)上。在我的项目中,我有一个特定的插件,运营商经常使用它。我在问题的最后添加了编辑对话框和框渲染的截图。带有可编辑链接元素的插件
编辑对话框很好,但现在按钮只是一个字符字段。因此,链接选择(包括Django CMS中的页面或外部URL)缺失。我寻找一个链接领域,但直到现在我迷路了。
如何添加功能让操作员选择内部或外部链接?
该插件由以下几部分组成:
models.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"
卡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>
呈现箱
插件编辑对话框如下:
我事先尝试了儿童插件解决方案。我把Text插件作为盒子插件的孩子。但这似乎有点肤浅。现在添加一个新盒子的方法非常快捷:在三个字段中添加盒子和标签,然后按回车键。完成。添加孩子对用户来说确实是一种负担,使得结构变得更加复杂,而没有获得任何东西。所以没有像LinkField或什么的? 我没有看到PlaceholderFields适用于我的问题,因为它是一个CMS插件,对不对? – itsafire
这不是一种负担,它只是使用django-cms更典型的方式。你可以为你的模型添加一个'LinkField',然后'instance.linkfield'就是你的按钮的'href'属性。然而,你遇到的麻烦是你没有[链接插件](https://github.com/divio/djangocms-link)的权力链接到页面或外部URL或其他设置,如类或模板。而'PlaceholderField'就是你可能想要考虑的事情,当你不熟悉它时,我会很有帮助。 –
但是我在我的模型中使用了djangocms_text_ckeditor.fields提供的HTMLField,并且在我的插件中有完整的编辑器。这似乎很强大。这在Django CMS中被认为是不好的设计?那么当有人需要将他的需求分散到更小的无关位时,那么插件有什么意义呢? – itsafire