web-dev-qa-db-fra.com

Django: Est-il impossible de taguer statique en tag block?

Le code ci-dessous fait une erreur .. Comment pourrais-je résoudre ce problème ??

Merci d'avance :)

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

La sortie d'erreur:

  • TemplateSyntaxError: balise de bloc non valide: "statique", "bloc final" attendu
55
nextdoordoc

Non, ce n'est pas impossible. Essayez d'inclure {% load staticfiles%} dans le même fichier html, plutôt que d'essayer de l'hériter de certains base.html.

119
David C

1.) Dans settings.py ajouter un tuple:

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

2.) Dans urls.py, ajoutez:

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

.) Dans le fichier html où vous placez le "link rel = 'stylesheet' ..", ajoutez simplement en haut:

{% load static from staticfiles %}

 and then use :

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

Ma solution est de include une autre page avec {% load static %} et script avec référence statique. {% block xxx %} attend le premier {% yyy %} ne pas être autre que {% include %} et {% endblock %} (les seuls cas que j'ai pu observer); donc quand on utilise "{% static 'xxx.js' %}" il casse et se plaint. Mais inclure une autre page mettra Django dans le calme.

Par exemple, j'ai une page homepage qui étend base.html et contient des fichiers js statiques qui ne sont pas inclus dans base.html.

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>

Maintenant, les scripts se chargent.

Donc, dans un bloc, nous ne pouvons pas utiliser {% %} balises autres que {% block xxx %} et {% endblock %}.

J'utilise Django 5.1.

MODIFIER:

J'ai trouvé {% verbatim %} tag pour être notre sauveur dans une telle situation.

1
WesternGun

Ajoutez simplement {% load static %} en haut de votre modèle après le {% extends 'app/base.html' %}.

0