Come gestire le variabili nell'ereditarietà dei modelli
-
05-07-2019 - |
Domanda
Voglio solo definire l'attributo id del tag body nel modello figlio. La prima soluzione funziona perfettamente:
base.html:
[body{% block bodyid %}{% endblock %}]
child.html:
{% block bodyid %} id="myId"{% endblock %}
È semplice e interessante! Ma non mi piace indicare id = " myId " in ogni modello figlio. Voglio solo inviare il valore 'myId' al modello principale, dove viene messo a id = " .... " ;. Quindi, invento questo metodo:
base.html:
[body{% block bodyid %} id={{ bodyid }}{% endblock %}]
child.html:
{% block bodyid %}
{% with 'myId' as bodyid %}
{{ block.super }}
{% endwith %}
{% endblock %}
Ma è terribile e noioso confrontare la prima soluzione. C'è un buon metodo per farlo?
Questo problema è più profondo della gestione di bodyId. Penso, provo a trovare e organizzare il sistema di subtemplate attraverso l'eredità del modello django standard.
Soluzione
Nel modello di base:
<body id="{% block bodyid %}{% endblock %}">
Nel modello figlio:
{% block bodyid %}myId{% endblock %}
Se capisco correttamente la tua domanda, questo dovrebbe essere sufficiente per ottenere ciò che desideri; invia solo l'ID effettivo ( myId
) al modello di base.
Altri suggerimenti
Tu, se preferisci, imposti questo tramite il tuo codice - in modo che i tuoi ID facciano parte del tuo oggetto di contesto, e quindi non sia richiesto di essere inseriti nei modelli figlio, solo le viste che li chiamano.
Puoi quindi dire al tuo modello di base di ottenere l'id dall'oggetto di contesto, o piuttosto usare semplicemente la sintassi del modello per esso:
<body id="{{ body_id }}">
Le preferenze personali qui ovviamente, e dipendono dalla struttura dei tuoi modelli e viste, ma è il modo in cui lo farei.