如何从 Django 模板中的页面迭代 cms 插件实例?

2023-12-30

我想显示 YouTube 视频列表并让我的用户编辑此列表。

我想这样做:

  1. 制作一个将显示此内容的模板。在此模板中执行类似的操作<ul>{% for plugin in page %}<li>plugin</li>{% endfor %}</ul>.
  2. Make a youtube_videos占位符并将其配置为仅限于该类型的插件。

但我不知道如何对模板中当前页面中的插件实例进行迭代。我在 django-cms 文档中没有看到任何有关此内容的内容,是的,我猜 django-cms“只是 django”,如果我正确地了解 django 那么我已经弄清楚了这一点。

但这里有一个很好的例子就很好了。


您不会迭代 Django-CMS 中的插件实例。占位符只是以线性方式呈现分配给它们的插件。可以将插件拖放到占位符中以重新排列它们,但据我所知,您无法在模板级别迭代插件本身,至少不容易。

要执行您想要的操作,您需要创建一个 CMS 插件,该插件允许您创建可以迭代的模型的多个实例,类似于“图像库”。

从概念上讲,您将有一个父模型:

class Gallery(CMSPlugin):
    """ A model that serves as a container for images """

    title = models.CharField(max_length=50, help_text='For reference only')

    def copy_relations(self, oldinstance):
        for slide in oldinstance.slides.all():
            slide.pk = None
            slide.gallery = self
            slide.save()

    def __unicode__(self):
        return self.title

和一个子模型:

class Slide(models.Model):
    def get_upload_to(instance, filename):
        return 'galleries/{slug}/{filename}'.format(
            slug=slugify(instance.gallery.title), filename=filename)

    title = models.CharField(max_length=100)
    image = models.ImageField(upload_to=get_upload_to)
    alt = models.CharField(max_length=100)
    gallery = SortableForeignKey(Gallery, related_name='slides')

    def __unicode__(self):
        return self.title

那么你就会有一个 CMS 插件,如下所示:

class CMSGalleryPlugin(CMSPluginBase):
    admin_preview = False
    inlines = Slide
    model = Gallery
    name = _('Gallery')
    render_template = 'gallery/gallery.html'

    def render(self, context, instance, placeholder):
        context.update({
            'gallery': instance,
            'placeholder': placeholder
        })
        return context

plugin_pool.register_plugin(CMSGalleryPlugin)

最后是迭代幻灯片图像的模板:

{% for slide in gallery.slides.all %}
    <img src="{{ slide.image.url }}" alt="{{ slide.alt }}" />
{% endfor %}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Django 模板中的页面迭代 cms 插件实例? 的相关文章

  • 在 TypeScript 中迭代对象的键和值

    在纯 JavaScript 中 我们可以迭代对象属性和值 如下所示 const values Object keys obj map key gt obj key 在 TypeScript 中 此语法是错误的 因为 TS 编译器显示以下消息
  • 通过django s3中间件保存文件时获取Http403(但可以在shell中使用boto保存)

    我一直在尝试通过 django 应用程序将用户上传的文件保存到我的 s3 存储桶中 我正在使用django s3 storage https github com etianen django s3 storage中间件 但我不断收到 S3
  • 在 django 中处理图像上传表单:何时使用 save()、chunks() 和 clean_data?

    我已经使用以下代码成功上传了图像 views py from django conf urls defaults import from django http import HttpResponse HttpResponseRedirec
  • 批处理文件 FOR/f 扩展

    我有一个文件 directories txt 与目录名称 每个在一行上 我喜欢扩展该行 C Documents and Settings USERNAME My Documents 在我的脚本中以真实用户名运行脚本 然而 回声与线路完全相同
  • 在 django 中导入设置时出现奇怪的错误

    我有很多项目在 ubuntu 中使用 python2 7 和 virtualenv virtualenvwrapper 工作 在我的工作中 一些开发人员使用 macosx 和 windows 通常我像往常一样创建项目 django admi
  • JavaScript 中最长的通用前缀

    我正在尝试解决 Leet Code 挑战14 最长公共前缀 https leetcode com problems longest common prefix 编写一个函数来查找字符串数组中最长的公共前缀字符串 如果没有公共前缀 则返回空字
  • OperationFailure:在 MongoEngine/PyMongo 中线程化时出现数据库错误

    我有一个函数可以从网站读取数据 对其进行处理 然后将其加载到 MongoDB 中 当我在没有线程的情况下运行它时 它工作正常 但是一旦我设置了只调用这个函数的 celery 任务 我经常会收到以下错误 OperationFailure 数据
  • 如何分割字符串并在ant脚本的for循环中使用它?

    我在 ant 属性中有一个机器 IP 列表
  • 404因为重新启动webpack-dev-server

    当我尝试更改反应组件并保存它以查看热加载器是否更新了我的页面时 我在开发人员工具中得到了这个 GET http localhost 3000 public bundle 76566a1ad7e45b834d4e hot update jso
  • Wagtail 自定义管理

    我是 Wagtail 和 Django 开发的新手 如何更改 Wagtail 管理页面的颜色 根据一些问答 我可以通过 core css 更改颜色 但是扫描代码需要很多时间 有一个更简单的方法 您可以注册 Wagtail Hook 在此处阅
  • django 1.9 不为自定义用户模型创建表

    我的项目名称是timecapture 这是 timecapture settings py 的相关部分 INSTALLED APPS django contrib admin django contrib auth django contr
  • 如何在 Django 序列化器中使用主键

    我的模型是 class UserInfo models Model user models OneToOneField User unique True mobile no models CharField max length 10 bl
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • django 删除模板中的硬编码 URL

    我知道在模板文件中我可以包含此代码 它将返回链接列表 for q in all ul li a href q question text a li ul endfor 现在 django 将搜索名称 detail in the urls p
  • 循环检查文本框是否不为空

    我试着For循环遍历表单上的所有控件以检查 TextBox 是否为空 然后将焦点放在第一个空文本框上 我的 Excel VBA 表单有 34 个文本框 现在它有一个嵌套的If检查所有文本框是否不为空的函数 如果还有空的 SetFocus第一
  • 本地化:django-admin compilemessages 跳过 venv

    我正在使用本地化Django 1 11应用 我可以排除虚拟环境文件夹node modules文件夹 同时使用消息文件添加消息 i选项如 django admin makemessages l no i venv django admin m
  • 操作数无法与形状 (128,) (0,) 错误一起广播

    我正在尝试实现面部识别登录系统 但出现错误 操作数无法与形状 128 0 一起广播 我不知道什么或如何解决它 这是我已实现的 view py 和 FaceDetector py 以及我从服务器收到的错误 errors Traceback m
  • Django 接受 AM/PM 作为表单输入

    我试图弄清楚如何使用 DateTime 字段在 Django 中接受 am pm 作为时间格式 但我遇到了一些麻烦 我尝试在 forms py 文件中这样设置 pickup date time from DateTimeField inpu
  • 在for循环中声明和初始化变量

    可以简单写一下吗 for int i 0 代替 int i for i 0 在 C 或 C 中 并且会变量i只能在循环内部访问 它在 C 中有效 它在 C 的原始版本中是不合法的 但在 C99 中被采用为 C 的一部分 当时一些 C 功能被

随机推荐