在實現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