Как зациклить данные пользовательских плагинов на шаблоне в django cms 3.5.3 - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь создать сайт, который использует RSS-каналы. Мой вариант использования - возможность отображать один канал RSS за раз, а затем переходить к следующему, возможно, через 5 секунд. Эти RSS-каналы должны отображаться в одном и том же заполнителе. Я новичок в django cms, если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Я много гуглил, но все, что я могу видеть, это как добавить плагины из внешнего интерфейса, и они все будут автоматически отображаться внутри заполнителя. Или измените метод рендеринга пользовательского класса плагина, чтобы отобразить то, что вы хотите. Но я хочу отображать все, кроме одного, непрерывно

@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 внутри моего заполнителя. Эти каналы являются ссылками на фактическую веб-страницу с дополнительной информацией.

1 Ответ

0 голосов
/ 08 апреля 2019

Одним из способов было бы написать функцию random_rss_feed_url() в модели ExternalArticle, которая визуализирует случайный экземпляр rss.

model.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);   
...