【发布时间】:2018-08-13 03:07:36
【问题描述】:
我依靠模板继承系统将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 中的指定位置。
例如,如果上面示例中 page.html 中的 extra_js 已添加到块模板中,则 select2 会抱怨 jquery 不存在,它会完全正确,因为它是随块插入的,但与 Core JS 库之后的预期不同。
加载jquery 两次会导致其他问题:https://stackoverflow.com/a/25782679/2146346
其他选项是将所有块依赖项加载到页面中,但它会用冗余资源填充页面,因为并非streamfield 中的每个块都可能在页面上使用。
还有其他选择吗?
【问题讨论】:
标签: django-templates wagtail wagtail-streamfield