Tengo un extraño problema, en mi archivo de configuración de todo es permitido que necesita ser activado por el usuario.is_authenticated uso de una plantilla.

Tengo el siguiente plantilla de etiqueta de código:

from django import template
from progmatic.cms.models import navigation, navigation_item
from django.template.defaultfilters import slugify
from django.shortcuts import render_to_response
from django.template import RequestContext

register = template.Library()

""" Gets the menu items you have entered in the admin.
 No arguments are accpeted"""

def get_hoofd_menu( ):
 menu = navigation.objects.get( slug = "hoofd-menu");
 mcontent = navigation_item.objects.filter( parent_menu = menu);
 return { 'mcontent' : mcontent }

def get_sub_menu( menu ):
 menu = navigation.objects.get( slug = slugify(menu) )
 mcontent = navigation_item.objects.filter( parent_menu = menu )
 c = RequestContext( request, { 'mcontent': mcontent,} )

 return render_to_reponse('menu.html', RequestContext(request, { 'mcontent' : mcontent }) )

register.inclusion_tag('menu.html')( get_hoofd_menu )
register.inclusion_tag('menu.html')( get_sub_menu )

Y la plantilla (menu.html) es como sigue:

{% block mainmenu %}
    <ul>
     {% for content in mcontent %}
      {% if content.login_required %}
       {% if content.to_page %}
        <li><a href="/page/{{ content.to_page_slug }}">{{ content.name }}</a></li>
       {% endif %}
       {% if content.to_url %}
        {% if content.external %}
         <li><a href="{{ content.to_url }}" rel="external">{{ content.name }}</a></li>
        {% else %}
         <li><a href="{{ content.to_url }}">{{ content.name }}</a></li>
        {% endif %}
       {% endif %}
      {% else %}
       {% if content.to_page %}
        <li><a href="/page/{{ content.to_page_slug }}">{{ content.name }}</a></li>
       {% endif %}
       {% if content.to_url %}
        {% if content.external %}
         <li><a href="{{ content.to_url }}" rel="external">{{ content.name }}</a></li>
        {% else %}
         <li><a href="{{ content.to_url }}">{{ content.name }}</a></li>
        {% endif %}
       {% endif %}
      {% endif %}
     {% endfor %}
    </ul>
    {% if user.is_authenticated %}
    JEEEEEEEJ LOGGED IN
    {% else %}
    Not logged in
    {% endif %}
    {% endblock %}

Pero siempre devuelve No ha iniciado la sesión, incluso cuando estoy conectado…
¿Alguien tiene una idea de lo que está mal con este código?

Gracias de antemano.

Saludos,
Bloeper

  • Actualización: el código es el mismo (el que he publicado… Pero ahora me sale un error… Así es la mejora. Dice: Atrapado en una excepción al procesar: nombre global ‘solicitud’ no está definido Y que es en el procesamiento de la respuesta de la parte 🙂
InformationsquelleAutor Bloeper | 2010-01-17

5 Comentarios

  1. 3

    ¿Tienes django.núcleo.context_processors.auth en TEMPLATE_CONTEXT_PROCESSORS configuración?

    Otra cosa a probar es su render_to_reponse sintaxis. de acuerdo a la documentación, debe ser

    return render_to_response('my_template.html',
                              my_data_dictionary,
                              context_instance=RequestContext(request))
    • Sí tengo todo el material necesario para que en mi archivo de configuración (tan lejos como pude leer en el django docs
    • (añadido otra cosa a comprobar)
    • Así que era el código en el primer lugar… Pero he intentado de esta manera con vano.
  2. 2

    ¿Tienes algún otro contexto procesadores registrado? Ellos pueden user?

    Recomiendo que se ejecuta bajo el dev server y hacer algo como:

    rc = RequestContext(request, ... params ...)
    user = rc.get('user')
    print user.username, user.is_authenticated()

    Si usted no obtiene los valores que esperar, entonces usted tiene que cavar más profundo. El siguiente debe iterar a través de todo el contexto dicts y mostrar que uno(s) con un valor de ‘usuario’. La primera de ellas será lo que la plantilla se ve.

    rc = RequestContext(request, ... params ...)
    for d in rc:
        print d
    • Yo estoy usando el dev server, pero cuando voy a imprimir algo en ella no la puedo ver en la consola. Yo sólo ejecutar el contexto predeterminado procesadores
    • Hmmm … Usted debe ver algo. Tratando de pegarse en un simple print "Foo!" en el inicio de su vista. Si esto no muestra que algo raro. También, ¿qué plataforma (Windows, Linux, Mac)? que versión de Python? Que versión de Django?
    • print «x» doenst funciona bien.. Y no es una opinión es un templatetag. Yo trabajo en linux con python 2.6 y django versión 1.1.1 hmm devolver cosas ahora :S
    • Lo siento, yo no estaba claro. El código anterior debe ser hecho en la vista de. Usted tiene que saber que los valores de contexto que va en el motor de plantillas son lo que necesitan para ser. Si la va-en-a no es correcto, entonces el viene-hacia fuera-de es, básicamente, el guacamole. También, es muy extraño que usted no está recibiendo la impresión de los valores desde el interior de su templatetag de procesamiento. Acabo de imprimir cheques desde el interior de la mina y se imprimen en la consola de bien.
  3. 2

    Primero de todo gracias por toda la ayuda.
    Encontré la solución gracias a todos 🙂
    Resulta que yo necesitaba para pasar la solicitud objeto en todas las vistas y necesario para ponerlo como un argumento en mi etiqueta de plantilla.
    Solución de código:

    from django import template
    from progmatic.cms.models import navigation, navigation_item
    from django.template.defaultfilters import slugify
    from django.shortcuts import render_to_response
    from django.template import RequestContext
    from itertools import chain
    register = template.Library()
    """ Gets the menu items you have entered in the admin.
    No arguments are accepted"""
    def get_hoofd_menu( request ):
    menu = navigation.objects.get( slug = "hoofd-menu");
    mcontent = navigation_item.objects.filter( parent_menu = menu, login_required = False);
    if request.user.is_authenticated and not request.user.is_anonymous():
    mmcontent = navigation_item.objects.filter( parent_menu = menu, login_required = True )
    else:
    mmcontent = ""
    final_menu = list(chain(mcontent,mmcontent))
    return { 'mcontent' : final_menu }
    #return render_to_response('menu.html', { 'mcontent' : mcontent } )
    def get_sub_menu( request, menu ):
    menu = navigation.objects.get( slug = slugify( menu ) )
    mcontent = navigation_item.objects.filter( parent_menu = menu, login_required = False )
    if request.user.is_authenticated and not request.user.is_anonymous():
    mmcontent = navigation_item.objects.filter( parent_menu = menu, login_required = True )
    else:
    mmcontent = ""
    final_menu = list(chain(mcontent,mmcontent))
    return { 'mcontent' : final_menu }
    #return render_to_response('menu.html', { 'mcontent' : mcontent })
    register.inclusion_tag('menu.html')( get_hoofd_menu )
    register.inclusion_tag('menu.html')( get_sub_menu )

    Gracias por toda la ayuda 🙂

    • pero entonces, ¿cómo hacer u llamada ur etiqueta en la plantilla , la necesidad de u para darle una solicitud param! {% get_hoofd_menu request%} derecho? cómo hacer u obtener la solicitud en la plantilla??
  4. 0

    ¿tienes django.contrib.auth y django.contrib.sesiones en el archivo de configuración?

    • Sí, ambos están en mi lista de aplicaciones instaladas
    • extraño. está usted seguro de que son logedin? ¿de inicio de sesión con la función login ()?
    • Sí, estoy seguro de que estoy conectado, puedo usar la función de inicio de sesión. Pero cuando me cambio el si de usuario.is_authenticated si no al usuario….. Luego me sale siempre el mensaje de Jeeej registra en.. Para el usuario.is_authenticated no funciona bien.
    • raro, muy raro. no tengo ahora nada más. lo siento… edit: tal vez usted puede tratar de solicitud.usuario.is_authenticated en lugar de usuario.is_authenticated ?
  5. 0

    donde es el código que comprueba si el usuario está autenticado? Si usted busca en la plantilla, usted debe proporcionar alguna indivcation al pasar parámetros desde el punto de vista de la plantilla.
    Para mí funciona, cuando hago esto en la parte superior:

    from django.contrib.auth.decorators import login_required

    y decorar todas las vistas en las que es importante, e.g:

    @login_required
    def get_hoofd_menu( ):

    es todo lo mencionado en el descripción (un poco por encima de la mitad)

    • Eso no es a lo que me refería… no… Es un templatetag, y el inicio de sesión no es necesario, yo sólo lo uso para algunos artículos en los que la se requiere inicio de sesión.
    • Me olvidé de mencionar que usted tiene que pasar en la solicitud que contiene el usuario a la vista, para que también puedan pasar a la plantilla (es decir, definir la vista como «get_hoofd_menu(petición):»), tal vez esa es la parte importante
    • Gracias por la ayuda, pero trató de que ya fue en vano 🙁

Dejar respuesta

Please enter your comment!
Please enter your name here