wake-up-neo.com

Django: Ist es unmöglich, ein Tag in ein Block-Tag zu statisieren?

Der folgende Code macht Fehler. Wie könnte ich dieses Problem beheben?

Danke im Voraus :)

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

Die Fehlerausgabe:

  • TemplateSyntaxError: Ungültiges Block-Tag: 'static', erwartetes 'endblock'
55
nextdoordoc

Nein, das ist nicht unmöglich. Versuchen Sie, {% load staticfiles%} In dieselbe HTML-Datei aufzunehmen, anstatt zu versuchen, sie von einem base.html Zu erben.

119
David C

1.) in settings.py A Tuple hinzufügen:

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

2.) in urls.py add:

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

.) Fügen Sie in der HTML-Datei, in die Sie das "link rel = 'stylesheet' .." einfügen, einfach oben hinzu:

{% load static from staticfiles %}

 and then use :

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

Meine Lösung ist, include eine andere Seite mit {% load static %} Und einem Skript mit statischem Verweis zu erstellen. {% block xxx %} Erwartet, dass der erste {% yyy %} Nicht anders als {% include %} Und {% endblock %} Ist (die einzigen Fälle, die ich beobachtet habe); Wenn wir also "{% static 'xxx.js' %}" benutzen, bricht es zusammen und beschwert sich. Aber das Einfügen einer weiteren Seite bringt Django in Ruhe.

Zum Beispiel habe ich eine Seite homepage, die base.html Erweitert und einige statische js-Dateien enthält, die nicht in base.html Enthalten sind.

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>

Nun werden die Skripte geladen.

Daher können wir in einem Block keine anderen {% %} - Tags als {% block xxx %} Und {% endblock %} Verwenden.

Ich benutze Django 5.1.

BEARBEITEN:

Ich fand das {% verbatim %} - Tag in einer solchen Situation unser Retter.

1
WesternGun

Einfach hinzufügen {% load static %} zum Anfang Ihrer Vorlage nach das {% extends 'app/base.html' %}.

0