Вставьте статический HTML в шаблон Jinja2 в CKAN

Вы можете присоединиться к двум коллекциям в Монго, используя поиск, который предлагается в версии 3.2. В вашем случае запрос будет

db.comments.aggregate({
    $lookup:{
        from:"users",
        localField:"uid",
        foreignField:"uid",
        as:"users_comments"
    }
})

, или вы также можете присоединиться к пользователям, тогда будет небольшое изменение, как указано ниже.

db.users.aggregate({
    $lookup:{
        from:"comments",
        localField:"uid",
        foreignField:"uid",
        as:"users_comments"
    }
})

Он будет работать так же, как левое и правое соединение в SQL.

0
задан lfurini 17 January 2019 в 19:52
поделиться

1 ответ

Сам нашел хороший ответ, публикуя здесь сообщения на случай, если другим интересно то же самое.

Нижеследующее основано на отличном учебном пособии в W3School: https://www.w3schools.com/howto/howto_html_include.asp

Я создал файл javascript custom_include_html.js, и поместил его в папку /templates моего плагина CKAN. (Я считаю, что это не файл шаблона, но он имеет непосредственное отношение к шаблонам, и в настоящее время меня не беспокоит изменение пути к загрузчику jinja2, поэтому я согласен с тем, чтобы он оставался в этой папке). Содержимое файла следующее, скопированное из учебника W3School, но размещенное здесь для вашей собственной справки:

function includeHTML() {
    var x, i, elem, file, xhttp;
    z = document.getElementByTagName("*");
    for (i=0; i<z.length; i++) {
        elem = z[i];
        file = elem.getAttribute("custom-include-html");
        if (file) {
            xhttp = new XMLHttpRequest();
            xhttp.onreadystatechange = function() {
                if (this.readystate == 4) {
                    if (this.status == 200) {elem.innerHTML = this.responseText;}
                    if (this.status == 400) {elem.innerHTML = "Page not found, sorry."}
                    elem.removeAttribute("custom-include-html");
                    includeHTML();
                }
            }
            xhttp.open("GET", file, true);
            xhttp.send();
            return;
        }
    }
};

Затем в шаблоне Jinja2, определяющем страницу, которую я должен вставить в файл my_file.html Я сделал блок как

{% block static_html_desc %}
    <div custom-include-html="/my_file.html"></div>
{% endblock %}

Заметьте, что этот файл помещается в общую папку CKAN , именно так, как я хотел в моем вопросе выше.

В нижней части шаблона я называю скрипт javascript следующим образом:

{% block custom_javascript %}
    <script type="text/javascript">

        {% include custom_include_html.js" %}

        includeHTML();

    </script>
{% endblock %}

Файл my_file.html затем обрабатывается в блоке {% block static_html_desc %}.

На этом этапе нужно всего лишь заменить вызов my_file.html чем-то не жестко закодированным, чтобы разные страницы загружали соответствующие файлы *.html. Это легко сделать с помощью вспомогательных функций шаблонов.

0
ответ дан F. Remonato 17 January 2019 в 19:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: