Estoy implementando una aplicación de permisos personalizados en mi proyecto Django, y estoy perdido en cuanto a cómo implementar una etiqueta de plantilla personalizada que comprueba los permisos de un usuario conectado para una instancia de objeto específico y muestra una pieza de HTML basada en el resultado del cheque.if..else personalizado plantilla etiqueta
Lo que tenemos ahora es (pseudocódigo):
{% check_permission request.user "can_edit" on article %}
<form>...</form>
{% endcheck %}
('check_permission' es mi etiqueta de plantilla personalizada).
La etiqueta de plantilla toma el usuario, el permiso y la instancia del objeto y devuelve el HTML adjunto (el formulario). Esto actualmente funciona bien.
Lo que me gustaría hacer, sin embargo, es algo así como:
{% if check_permission request.user "can_edit" on article %}
<form>...</form>
{% else %}
{{ article }}
{% endif %}
He leído sobre the assignment tag, pero mi miedo es que iba a contaminar el espacio de las variables de contexto con esto (lo que significa que podría sobrescribir anterior variables de contexto de permisos). En otras palabras, como las variables de contexto se están definiendo en diferentes niveles (la vista, el middleware en mi caso y ahora esta etiqueta de plantilla de asignación), me preocupa la capacidad de mantenimiento.
Gracias, los filtros podrían ser una opción. Sin embargo, preveo diferentes permisos (no solo el CRUD básico en la instancia, sino algunos muy específicos), lo que significa que tendría que crear una cantidad igual de filtros de plantilla personalizados. Sin embargo, tal vez debería reconsiderar mi modelo de permisos personalizados. Si dice que es complicado pasar múltiples argumentos a un filtro, ¿quiere decir que es posible? Pensé que no era así, ¿podrías aclarar esto un poco? – LaundroMat
Actualizar a futuros visitantes: creo que intentaré resolverlo con filtros encadenados (por ejemplo, '{{request.user | has_permission:" entries.entry.can_edit, "| has_permission_on: article}}'. El filtro de plantilla personalizada has_permission devuelve el usuario y el permiso requerido, has_permission_on toma estos valores, los compara con la variable del artículo y devuelve True o False. – LaundroMat