J'ai un modèle Jinja2 sur lequel je travaille pour une application d'édition de base de données, et j'essaie de le rendre "extensible" - plutôt que de coder en dur la page d'édition, je passe une liste d'attributs que je veux dans le table, et en utilisant une boucle for pour les parcourir. Cela fonctionne à part une chose - dans la version codée en dur, j'utilise un attribut d'un objet qui est passé pour voir si cette valeur a été définie (ils sont tous booléens), mais je ne vois pas comment faire en sorte que jinja2 prenne le 'capability' et l'utiliser comme attribut de l'objet 'pupil' ; J'aurais utilisé 'eval' en Python, mais je ne vois pas comment faire fonctionner cela. Voici une idée du code:
{% for capability in capability_list %}
<tr>
<td>{{ capability }}</td>
<td>
{% if pupil.capability %}
<img src="{{request.static_url('gdpr_permissions:static/tick.png')}}" width="25">
{% else %}
<img src="{{request.static_url('gdpr_permissions:static/cross.png')}}" width="25">
{% endif %}
</td>
<td>
<div class="onoffswitch">
<input type="checkbox" name="{{ capability }}" class="onoffswitch-checkbox" value ='No' id="{{ capability }}" checked>
<label class="onoffswitch-label" for="{{ capability }}">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</td>
</tr>
{% endfor %}
C'est la {% if pupil.capability %}
partie qui ne fonctionne pas - je veux que cela devienne (disons) pupil.web_access
et pupil.database_access
etc., en suivant la liste des capacités qui est itérée.
Des idées sur la façon de faire fonctionner cela avec jinja2, ou comment cela peut-il être approché autrement? L'autre idée que j'avais était d'itérer sur les paramètres actuels dans le backend python, puis de passer une liste de booléens séparément, mais cela semble ajouter un niveau supplémentaire de complexité.
Solution du problème
C'est parce que vous transmettez une chaîne au lieu d'un attribut. Utilisez à la getattr()
place. Faites quelque chose commegetattr(pupil, capability)
Aucun commentaire:
Enregistrer un commentaire