テンプレート継承システムを使用して、ページに挿入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
ブロック テンプレートの 1 つにカスタム css/js が必要な場所で使用する必要がある場合、問題が発生します。この場合、カスタム リソースはブロックと共に挿入されますが、base.htmlの指定された場所には挿入されません。
たとえば、上記の例extra_js
のpage.htmlが代わりにブロック テンプレートに追加されている場合、ブロックと共に挿入されているが、コア JSの後に意図したとおりではないため、存在しないselect2
と不平を言うでしょう。ライブラリ。jquery
2 回ロードjquery
すると、他の問題が発生します: https://stackoverflow.com/a/25782679/2146346
他のオプションは、すべてのブロックの依存関係をページにロードすることですが、すべてのブロックがページでstreamfield
使用されるとは限らないため、冗長なリソースでページがいっぱいになります。
他のオプションはありますか?