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