【问题标题】:How to loop over custom plugin data on the template in django cms 3.5.3如何在 django cms 3.5.3 中循环模板上的自定义插件数据
【发布时间】:2019-04-08 08:39:06
【问题描述】:

我正在尝试实现一个使用 RSS 源的网站。 我的用例是能够一次显示一个 RSS 提要,然后可能在 5 秒后循环到下一个提要。这些 RSS 提要需要显示在同一个占位符上。 我是 django cms 的新手,如果您需要更多信息,请告诉我。

我搜索了很多,但我只能看到如何从前端添加插件,它们都会自动显示在占位符中。 或者修改自定义插件类的render方法来显示你想要的。 但我想以连续的方式一次显示除一个以外的所有内容

@plugin_pool.register_plugin
class ExternalArticlePlugin(CMSPluginBase):
    model = ExternalArticle
    name = _("External article")
    render_template = "external_article.html"
    cache = False

    def render(self, context, instance, placeholder):
        context = super(ExternalArticlePlugin, self).render(
            context, instance, placeholder
        )
        return context

我希望在占位符内一次显示一个 RSS 提要。 这些提要是指向包含更多信息的实际网页的链接。

【问题讨论】:

    标签: python django django-cms


    【解决方案1】:

    一种方法是在 ExternalArticle 模型中编写一个函数random_rss_feed_url(),它呈现一个随机的 rss 实例。

    模型.py

    class ExternalArticle(models.Model):
    
        def random_rss_feed_link(self):
            return ExternalArticle.objects.order_by('?')[0].link
    

    然后你在插件 external_article.html 中做:

    {{ instance.random_rss_feed_link }}
    

    已编辑

    如果您想在不重新加载页面的情况下自动更改,那么您需要在模板中的 javascript 中使用类似的内容:

    var rss_links = ['link_1', 'link_2', 'link_3']; 
    
    setInterval(function() {
    
        // take random rss link
        var random_link = rss_links[Math.floor(Math.random()*rss_links.length)];
    
        // change the link 
        document.getElementById('rss_link_element').href = random_link;
    
    }, 5000);   
    

    【讨论】:

    • 感谢您的快速回复。我试了一下。它有效,但还剩下一件事。我希望它有一个计时器,它会在 n 秒内显示第一个链接,然后自动将其替换为下一个链接,依此类推。现在我想我必须手动刷新页面才能看到下一个随机提要。谢谢
    • @joseluke 好的,那你最好用javascript渲染所有链接并在前端切换,我会更新答案
    • 一件小事。如何用我的数据库替换 ['link_1', 'link_2', 'link_3']?我是从ExternalArticle 还是从ExternalArticlePlugin 进行转换?因为目前我不能像那样使用instance
    • 这是我的模板中的内容``` {% for i in instance.random_rss_feed_link %} {{ i.title }}
      {% endfor %} ```你能帮我用这个代替['link_1', 'link_2', 'link_3']吗?
    • @joseluke 是的,您将查询 ExternalArticle 模型的所有对象并通过您的插件类将它们呈现为列表
    猜你喜欢
    • 2012-05-26
    • 2012-09-24
    • 2013-04-05
    • 2017-03-29
    • 2011-10-17
    • 2014-07-18
    • 2016-11-17
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多