Pregunta

Tengo un problema extraño, en mis ajustes del archivo de todo lo que se habilita debe estar habilitado para su uso user.is_authenticated en una plantilla.

Tengo el siguiente código de la etiqueta de plantilla:

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 el siguiente:

{% 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 rendimientos no conectado, incluso cuando estoy conectado ... ¿Alguien tiene una idea de lo que está mal con este código?

Gracias de antemano.

Saludos, Bloeper

¿Fue útil?

Solución 3

Ante todo gracias por toda la ayuda. He encontrado la solución gracias a todos ustedes :) Resulta que yo tenía que pasar el objeto de la petición en todas las vistas y necesario para ponerlo como un argumento en mi etiqueta de plantilla. código de la solución:

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 la ayuda al:)

Otros consejos

¿Tiene Django .core.context_processors.auth en TEMPLATE_CONTEXT_PROCESSORS configuración?

Otra cosa a intentar es su sintaxis render_to_reponse. de acuerdo con los documentos, debería ser

return render_to_response('my_template.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))

¿Tiene algún otros procesadores de contexto registrados? ¿Se establecen user?

Yo recomiendo ejecuta en el servidor dev y hacer algo como:

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

Si usted no recibe los valores esperados, entonces hay que cavar más profundo. Lo siguiente debe recorrer todos los dicts de contexto y cuál (s) contiene un valor de 'usuario' mostrar. El primero de ellos será lo que ve la plantilla.

rc = RequestContext(request, ... params ...)
for d in rc:
    print d

¿tiene django.contrib.auth y django.contrib.sessions en la configuración de presentar?

¿dónde está el código real que comprueba si el usuario es autenticado? Si marca para él en la plantilla, se debe proporcionar algún 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 todos los puntos de vista, donde es importante, por ejemplo:

@login_required
def get_hoofd_menu( ):

todo se menciona en el visión general (una poco por encima de la mitad de)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top