Логика списка языков шаблонов HubL
Я работаю в cms под названием Hubspot, используя язык шаблонов под названием HubL. Hubspot написан на python, а HubL очень похож на шаблоны Jinja2 или Django. Обычно, когда мне нужно найти ответ, я могу найти ответ в jinja2 и найти то, что мне нужно. Я пытался выяснить это уже несколько недель, но думаю, что проблема в конкретном.
Hubspot ведет блоги. Эти блоги доступны в переменной "содержимое" в шаблоне блога или с помощью предварительно определенной функции для любого другого типа шаблона:
{% for content in contents %}
{# output blog list #}
{% endfor %}
или же
{% set test_list = blog_recent_posts('default', 250) %}
{% for post in test_list %}
{# output blog list #}
{% endfor %}
У каждого сообщения в блоге есть переменная themes_list. эта переменная содержит список тем, заданных для определенного блога. вы бы использовали его внутри цикла списка блогов, просматривая его.
{% for content in contents %}
{% for topic in content.topic_list %}
{{ topic.name }}
{% endfor %}
{% endfor %}
Если вы просто позвоните topic_list:
{% for content in contents %}
{{ content.topic_list }}
{% endfor %}
это выводит:
[topic1, topic2]
У меня проблема в том, что мне нужно исключить посты с конкретными темами из основного списка. Я могу использовать вложенный цикл for и условие для исключения из вывода:
{% for content in contents %}
{% for topic in content.topic_list %}
{% unless topic.name = 'topic 1' %}
{# ouput if condition is not met #}
{% endunless %}
{% endfor %}
{% endfor %}
Это грязно. Он просматривает блоги и каждый индекс просматривает темы. если тема соответствует определенной теме, то она исключается из вывода. Это работает, за исключением того, что он не пропускает блог из содержимого. Блоги, которые заблокированы от вывода, все еще существуют в своем индексе. Если я ограничу вывод, например, до 3 блогов, и у одного из трех блогов есть тема, которая соответствует теме 1, пространство не заполняется следующим блогом в строке, пространство просто остается пустым.
На самом деле это выводит разметку для элемента списка для каждой темы каждого блога, если эта тема не соответствует заблокированной теме, поэтому она будет дублировать сообщения, если присутствует более одной темы.
Я подумал об использовании предопределенной функции, которую можно использовать для определения конкретной темы, для которой вы хотите опубликовать сообщения, поэтому я просмотрел глобальный список тем, связанных с блогом, и, если тема не совпадает с заблокированными темами, она запускает тему. конкретная функция:
{% set mlist = [] %}
{% set global_topics = blog_topics('default', 250) %}
{% for gtopic in global_topics %}
{% unless gtopic == 'topic1' %}
{% set wlist = blog_recent_posts('default', 250, gtopic.slug) %}
{% set mlist2 = mlist.append(wlist) %}
{% endunless %}
{% endfor %}
{% for post in mlist[0] %}
<strong>{{post.name }}</strong><br>
{% for topic in post.topic_list %}
{{topic.name}}<br>
{% endfor %}<br> <br>
{% endfor %}
Честно говоря, я удивлен, что получил этот рабочий период, но он объединяет список, созданный по каждой теме, и выводит их. Единственная проблема заключается в том, что, поскольку к темам применяются несколько тем, хотя он не включает список, созданный из заблокированной темы, он по-прежнему включает блоги, содержащие заблокированную тему из списков, созданных с использованием второй или третьей (и т. Д.) Темы. в блоге.
Самое простое решение - создать новый список, отфильтровав сообщение, если тема находится в разделе topic_list, но это не работает.
{% set mlist = [] %}
{% for content in contents %}
{% unless 'topic-1' is in content.topic_list %}
{% set mlist2 = mlist.append(content) %}
{% endunless %}
{% endfor %}
но я думаю, вы не можете использовать "в", как это? это не работает
Пожалуйста, имейте в виду, что я понимаю, что это не будет проблемой, если я выполню эту фильтрацию в python напрямую, а не в шаблоне, и я понимаю, что логика не должна обрабатываться в шаблоне, но Hubspot не позволяет настраивать скриптинг на Python или любые другие возможности, так что это то, с чем я должен работать. Кто-нибудь может придумать креативное решение?