Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

303
Vistas
Uso de permisos de django en etiquetas de plantilla

Actualmente estoy revisando los permisos en mis plantillas para decidir si quiero o no mostrar un enlace en particular.

Esto funciona muy bien para mi base.html que se extiende en mis plantillas normales:

base.html

 {% if perms.myapp.can_add %} #display link {% endif %}

mi plantilla

 {% extends "riskass/base.html" %} {% block content %} # do stuff # {% endblock %}

PERO también uso etiquetas de plantilla para elementos repetitivos en la plantilla, y las mismas comprobaciones de permisos no parecen funcionar en ellos.

¿Alguien tiene una idea de lo que podría estar haciendo mal? Gracias !

mi plantilla

 {% extends "riskass/base.html" %} {% load show_items %} {% block content %} # do stuff # {% show_items items_list%} {% endblock %}

templatetags/show_items.py

 from django import template register = template.Library() @register.inclusion_tag('myapp/show_items.html') def show_items(items): return {'items': items}

miaplicación/mostrar_elementos.html

 {% for item in items%} # display stuff: this works ... # check permissions: {% if perms.myapp.can_add %} #display other link: doesn't do anything {% endif %}
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

perms es parte del contexto de la plantilla en el que se representa su plantilla "mi plantilla". Pero su plantilla de etiqueta de inclusión myapp/show_item.html de forma predeterminada tiene su propio contexto y no heredará perms ni ninguna otra variable de plantilla a menos que lo organice takes_context=True en el registro de su etiqueta, además de hacer solo un poco de código para pasar parte o todo ese contexto a su contexto de plantilla de etiqueta.

Hay un ejemplo de esto en los documentos de Django:

https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/#inclusion-tags

Es un poco confuso porque los documentos parecen implicar que puede pasar sus propios argumentos al método de etiqueta o pasar contexto, pero no ambos. Sin embargo, este no es el caso. Cuando takes_context=True a @register.inclusion_tag() , el efecto será que django pasa el context como el primer argumento a su función de etiqueta, seguido de cualquier argumento que desee pasar a su etiqueta. El contexto que se pasa es el de la plantilla donde se encuentra su etiqueta... por lo que puede tomar lo que necesita de allí y pasarlo a la plantilla incluida, por ejemplo:

 @register.inclusion_tag('riskass/show_ratings.html', takes_context=True) def show_ratings(context, ratings): return { 'ratings': ratings, 'perms': context.get('perms', None) }

El uso de la etiqueta se vería así:

 {% show_ratings ratings_list %}

Hay información útil en esta otra pregunta y respuesta de Stack Overflow, aunque no es exactamente lo mismo que su pregunta, es posible que desee echar un vistazo:

Pasar una variable de contexto a través de una etiqueta de inclusión

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda