it-swarm-ja.tech

上書きするのではなく、{%block%}に追加できますか?

Core.htmlには、javascriptというラベルのブロックがあります。このブロック内のすべてを上書きせずに、このブロックにさらに行を追加できるといいですね。

111
PKKid
{% block javascript %}
    {{ block.super }}
    ... more content ...
{% endblock %}

参照: Django documentation-Template inheritance

192
Steve Losh

block.superを使用すると、テンプレートを拡張する場合は問題なく機能しますが、テンプレートを含める場合はうまく機能しません。

{% extends "base.html" %} vs. {% include "partial.html" %}

ページの中央にテンプレートを含めたい場合、ページの最後のブロックにjavascriptを追加したい場合:含まれているテンプレートでblock.superを呼び出すとクラッシュします。

Cf. Django issues #7324#12008#13399 および 関連するアップデートドキュメント 。Cf. タグを含める 注:

Includeタグは、「このサブテンプレートを解析して、親の一部であるかのようにそのコンテンツを含める」のではなく、「このサブテンプレートをレンダリングしてHTMLを含める」の実装と見なす必要があります。これは、含まれるテンプレート間で共有状態がないことを意味します。各インクルードは完全に独立したレンダリングプロセスです。

ブロックは、含まれる前に評価されます。つまり、別のブロックを含むテンプレートには、すでに評価およびレンダリングされたブロックが含まれます。たとえば、拡張テンプレートによってオーバーライドできるブロックは含まれません。

その場合、 Django-sekizai を使用することをお勧めします。ただし、次のようなことができます。

{% load sekizai_tags %}

                                ⎧  <p>Some content</p>
<p>Some content</p>             | {% addtoblock "js" %}
                                |   <script type="text/javascript">
{% include "partial.html" %} -> ⎨     alert("Hello Django-sekizai");
                                |   </script>
<p>Some more content</p>        ⎩ {% endaddtoblock %}


{% render_block "js" %}

Django-sekizai README から:

私がこのプロジェクトを始めた主な理由は、Django=とDjango-cmsに優れたメディア(css/js)フレームワークがないことです。Djangoのフォームで使用されるMediaクラスがありますが、通常、フロントエンドの人は、含まれるCSSファイルとJavaScriptファイルを決定したいので、Pythonファイルを編集して、どちらも変更しなかったPythonファイルを変更します。そのため、現在の時点の前後にあるテンプレートの内容を編集できるようにする必要がありました。また、重複を削除したかったのです。 。結果として、私はDjango-sekizaiを作成しましたが、これはまさにそれを行うもので、ブロックに似ています。

9
Maxime R.