スクリーンショットを表示する Django-CMS 用のカルーセル プラグインを作成しました。基礎となるモデルには、いくつかのカルーセル関連のパラメーター (高さ、アニメーション スタイルなど) とForeignKey
to がありScreenshotGroup
ます。
class ScreenshotGroup(models.Model):
name = models.CharField(max_length=60)
screenshots = models.ManyToManyField(Screenshot, through="ScreenshotGroupMember")
class Screenshot(models.Model):
name = models.CharField(max_length=60)
desc = models.TextField(_("description"), blank=True)
img = models.ImageField(upload_to='img/')
class CarouselPluginModel(CMSPlugin):
group = models.ForeignKey(ScreenshotGroup)
height = models.IntegerField()
...
カルーセルのビュー メソッドには次が含まれます。
context['item_list'] = instance.group.screenshots.all()
(実際には Django-CMS を使用しているため、cms_plugins.py
render
メソッドではなくview
メソッド内にあります。)
テンプレートは、次の方法でスクリーンショット フィールドを参照します。
{% for item in item_list %}
{{ item.name }}
{{ item.desc }}
...{{ item.img }}...
{% endfor %}
私の質問は: カルーセル プラグインを一般化して他のプロジェクトで再利用したいので、Screenshot
モデルに依存しません。テンプレートのfor
ループの内容を に置き換えて、include
各プロジェクトがアイテムをカルーセルに表示する方法を指定できるようにします。しかし、どうすれば を一般化できるでしょCarouselPluginModel
うForeignKey
か?
特定のアプリケーションでは、1 つのタイプのモデルのみを許可する必要があります (ScreenshotGroup
私の例では)。管理コンソールに他のモデルを含めることを許可したくありません。
ありがとう!