Question

J'ai un problème étrange, dans mes paramètres fichier tout est activé qui doit être activé pour une utilisation user.is_authenticated dans un modèle.

J'ai le code d'étiquette de modèle suivant:

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 )

Et le modèle (menu.html) est la suivante:

{% 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 %}

Mais il revient toujours pas connecté, même quand je suis connecté ... Est-ce que quelqu'un a une idée de ce qui ne va pas avec ce code?

Merci d'avance.

Bonjour, Bloeper

Était-ce utile?

La solution 3

Tout d'abord merci pour toute l'aide. J'ai trouvé la solution grâce à vous tous :) S'avère que je avais besoin de passer l'objet de la demande dans toutes les vues et besoin de le mettre comme argument dans mon étiquette de modèle. Code Solution:

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 )

Merci pour al l'aide:)

Autres conseils

Avez-vous django .core.context_processors.auth TEMPLATE_CONTEXT_PROCESSORS établissement?

Une autre chose à essayer est votre syntaxe render_to_reponse. d'après les documents, il devrait être

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

Avez-vous des autres processeurs de contexte enregistrés? Ont-ils mis user?

Je recommande en cours d'exécution sous le serveur dev et faire quelque chose comme:

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

Si vous ne recevez pas les valeurs que vous attendez, alors vous avez besoin de creuser plus profondément. Ce qui suit devrait itérer tous dicts contexte et vous montrer que l'on (s) contient une valeur pour « utilisateur ». Le premier sera ce que le modèle voit.

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

avez-vous django.contrib.auth et django.contrib.sessions dans vos paramètres? Fichier

où est le code réel qui vérifie si l'utilisateur est authentifié? Si vous vérifiez dans le modèle, vous devez fournir des indivcation lors du passage des paramètres de la vue du modèle. Pour moi, cela fonctionne quand je le fais en haut:

from django.contrib.auth.decorators import login_required

et décorer toutes les vues où il est important, par exemple:

@login_required
def get_hoofd_menu( ):

il est tout mentionné dans le aperçu (un peu au-dessus à mi-parcours)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top