web-dev-qa-db-ja.com

Django:ブロックタグに静的タグを付けることは不可能ですか?

次のコードはエラーになります。どうすればこの問題を解決できますか?

前もって感謝します :)

{% block header %}
    <link rel="stylesheet" href="{% static 'shop/style.css' %}" />
{% endblock %}

エラー出力:

  • TemplateSyntaxError:無効なブロックタグ: 'static'、予想される 'endblock'
55
nextdoordoc

いいえ、不可能ではありません。 {% load staticfiles%}いくつかのbase.html

119
David C

1。)settings.pyでタプルを追加:

STATIFILES_DIR =(os.path.join(BASE_DIR、 'assets')、)

2。)urls.pyに追加:

 from Django.contrib.staticfiles.urls import staticfiles.urlpatterns
 urlpatterns += staticfile_urlpatterns()

。) "link rel = 'stylesheet' .."を配置するhtmlファイルで、単に先頭に追加します:

{% load static from staticfiles %}

 and then use :

 <link rel="stylesheet" href="{% static 'assets/css' %}"
11
Aditya

私の解決策は、include別のページに{% load static %}と静的参照のあるスクリプトを追加することです。 {% block xxx %}は、最初の{% yyy %}{% include %}および{% endblock %}(私が観察した唯一のケース)以外であることを期待しています。したがって、"{% static 'xxx.js' %}"を使用すると、エラーが発生し、問題が発生します。しかし、別のページを含めるとDjangoが落ち着きます。

例えば、base.htmlを拡張するhomepageページがあり、base.htmlに含まれていないいくつかの静的jsファイルがあります。

base.html

{% block page %}

{% endblock %}
{% block script %}

{% endblock %}

homepage.html

{% extends 'base.html' %}
{% block page %}
...
{% endblock %}
{% block script %}
    {% include 'home_js.html'%}  <!-- don't use static links here because Django does not like it. -->
{% endblock %}

home_js.html

{% load static %}
<script src="{% static 'scripts/jquery.js' %}" ></script>
<script>
    function ...
</script>

これで、スクリプトがロードされます。

そのため、ブロックでは{% %}および{% block xxx %}以外の{% endblock %}タグを使用できません。

私はDjango 5.1。

編集:

このような状況では、{% verbatim %}タグが救世主であることがわかりました。

1
WesternGun

テンプレートの先頭に{% load static %}を追加するだけですafter the {% extends 'app/base.html' %}

0