我依靠模板继承系统来插入extra_css
和/或extra_js
进入我的页面:
base.html:
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Core CSS -->
{% block extra_css %}
{# Override this in templates to add extra stylesheets #}
{% endblock %}
</head>
<body>
{% block content %}{% endblock content %}
<!-- Core JS -->
{% block extra_js %}
{# Override this in templates to add extra javascript #}
{% endblock extra_js %}
</body>
</html>
page.html:
{% extends "base.html" %}
{% block extra_css %}
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />
{% endblock %}
{% load wagtailcore_tags wagtailimages_tags %}
{% block content %}
<div class="blog-post">
<!-- Custom HTML -->
{% block content %}
{% include_block page.body %}
{% endblock %}
</div><!-- /.blog-post -->
{% endblock %}
{% block extra_js %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
<script type="text/javascript">
// Custom JavaScript
</script>
{% endblock extra_js %}
这很好用,因此确实在它所属的地方插入了额外的 css/js。
如果我需要在streamfield
其中一个块模板需要自定义 css/js 的地方使用,就会出现问题。在这种情况下,自定义资源与块一起插入,但不在base.html中的指定位置。
例如,如果上面示例中extra_js
的page.html已添加到块模板中,那么select2
会抱怨jquery
不存在,这是完全正确的,因为它是与块一起插入的,但不是在Core JS之后的预期图书馆。
加载jquery
两次会导致其他问题:https ://stackoverflow.com/a/25782679/2146346
其他选项是将所有块依赖项加载到页面中,但它会用冗余资源填充页面,因为并非页面中的每个块都streamfield
可能在页面上使用。
还有其他选择吗?