tag - Django: ¿Es imposible etiquetar estático en la etiqueta de bloqueo?
django templates examples (4)
El siguiente código comete un error. ¿Cómo podría resolver este problema?
Gracias por adelantado :)
{% block header %}
<link rel="stylesheet" href="{% static ''shop/style.css'' %}" />
{% endblock %}
El resultado de error:
- TemplateSyntaxError: etiqueta de bloque inválida: ''static'', expected ''endblock''
No, no es imposible. Intente incluir {% load staticfiles%}
en el mismo archivo html, en lugar de intentar heredarlo de algún base.html
.
1.) en settings.py agrega A TUPLE:
STATIFILES_DIR = (os.path.join (BASE_DIR, ''assets''),)
2.) en urls.py agregar:
from django.contrib.staticfiles.urls import staticfiles.urlpatterns
urlpatterns += staticfile_urlpatterns()
3.) en el archivo html donde está poniendo "link rel = ''stylesheet'' ..", simplemente agregue en la parte superior:
{% load static from staticfiles %}
and then use :
<link rel="stylesheet" href="{% static ''assets/css'' %}"
Sí. Django no lo permitirá.
Solo puede usar la ruta apropiada como:
<link rel="stylesheet" href="/static/shop/style.css" />
Pero tenga en cuenta: si cambia el STATIC_URL
su aplicación, el href
anterior también debe actualizarse en consecuencia.
Desde Configurar archivos estáticos :
En sus plantillas, codifique la URL como /static/my_app/example.jpg o, preferiblemente, use la etiqueta de plantilla estática ...
Mi solución es include
otra página con {% load static %}
y script con referencia estática. {% block xxx %}
espera que el primer {% yyy %}
no sea distinto de {% include %}
y {% endblock %}
(los únicos casos que he observado); así que cuando usamos "{% static ''xxx.js'' %}"
se rompe y se queja. Pero incluir otra página pondrá a Django en calma.
Por ejemplo, tengo una página de homepage
que extiende base.html
y tiene algunos archivos js estáticos que no están incluidos en 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>
Ahora los guiones se cargan.
Por lo tanto, en un bloque no podemos usar etiquetas {% %}
%% {% %}
distintas de {% block xxx %}
y {% endblock %}
.
Estoy usando Django 5.1.
EDITAR:
Encontré la etiqueta {% verbatim %}
como nuestro salvador en tal situación.