Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

305
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!