template tag registered one not must library filters custom create assignment_tag python django django-templates django-custom-tags

python - tag - Solicitud de acceso en etiquetas de plantilla personalizadas de django



is not a registered tag library. must be one of: (3)

Intenté una solución desde arriba (de Ignacio Vázquez-Abrams) y en realidad no funcionó hasta que descubrí que los procesadores de contexto solo funcionan con la clase contenedora RequestContext .

Por lo tanto, en el método de vista principal, debe agregar la siguiente línea:

from django.template import RequestContext return render_to_response(''index.html'', {''form'': form, }, context_instance = RequestContext(request))

Mi código en myapp_extras.py:

from django import template register = template.Library() @register.inclusion_tag(''new/userinfo.html'') def address(): address = request.session[''address''] return {''address'':address}

en ''settings.py'':

TEMPLATE_CONTEXT_PROCESSORS =( "django.core.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", ''django.core.context_processors.request'' )

pero tengo un error:

TemplateSyntaxError at /items/ Caught an exception while rendering: global name ''request'' is not defined Original Traceback (most recent call last): File "C:/Python25/lib/site-packages/django/template/debug.py", line 71, in render_node result = node.render(context) File "C:/Python25/lib/site-packages/django/template/__init__.py", line 915, in render dict = func(*args) File "C:/p4/projects/myproject/../myproject/invoice/templatetags/myapp_extras.py", line 9, in address address = request.session[''address''] NameError: global name ''request'' is not defined

Hice referencia a este En Django, ¿es posible acceder a la sesión del usuario actual desde una etiqueta personalizada? .


Lo he hecho de esta manera:

from django import template register = template.Library() def do_test_request(parser,token): try: tag_name = token.split_contents() # Not really useful except ValueError: raise template.TemplateSyntaxError("%r error" % token.contents.split()[0]) return RequestTestNode() class RequestTestNode(template.Node): def __init__(self,): self.request = template.Variable(''request'') def render(self, context): rqst = self.request.resolve(context) return "The URL is: %s" % rqst.get_full_path() register.tag(''test_request'', do_test_request)

También hay una función llamada resolve_variable , pero está en desuso.

¡Espero eso ayude!