Frage

Ich habe ein seltsames Problem, in meiner Einstellungsdatei alles aktiviert, dass der Bedarf für user.is_authenticated Verwendung in einer Vorlage aktiviert werden.

Ich habe folgenden Template-Tag Code:

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 )

Und die Vorlage (menu.html) ist wie folgt:

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

Aber es gibt immer nicht in noch angemeldet, wenn ich angemeldet bin ... Hat jemand hat eine Ahnung, was mit diesem Code falsch ist?

Vielen Dank im Voraus.

Grüße, Bloeper

War es hilfreich?

Lösung 3

Erstmal Danke für all die Hilfe. Ich fand die Lösung dank euch allen :) Stellt sich heraus, ich brauchte das Request-Objekt in jeder Ansicht zu übergeben und benötigt als Argument in meinem Template-Tag zu setzen. Lösungscode:

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 )

Vielen Dank für die Hilfe al:)

Andere Tipps

Möchten Sie haben django .core.context_processors.auth in TEMPLATE_CONTEXT_PROCESSORS Einstellung?

Eine andere Sache, zu versuchen, Ihre render_to_reponse Syntax. nach dem docs, sollte es sein

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

Sie haben keine anderen Kontext Prozessoren registriert? Haben sie Satz user?

Ich empfehle unter dem dev-Server ausgeführt wird und so etwas wie:

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

Wenn Sie nicht die Werte erhalten Sie erwarten, dann müssen Sie tiefer graben. Folgendes sollte durch alle Kontext dicts laufen und zeigen Ihnen, welche (s) einen Wert für ‚user‘ enthalten. Die erste wird sein, was die Vorlage sieht.

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

Sie tun django.contrib.auth und django.contrib.sessions in Ihre Einstellungsdatei haben?

Dabei ist der eigentliche Code, dass überprüft, ob der Benutzer authentifiziert ist? Wenn Sie es in der Vorlage zu überprüfen, sollten Sie einige indivcation liefern, wenn Parameter aus der Sicht auf die Vorlage übergeben. Bei mir funktioniert es, wenn ich dies tun, an der Spitze:

from django.contrib.auth.decorators import login_required

und dekorieren alle Ansichten, wo es wichtig ist, z:

@login_required
def get_hoofd_menu( ):

es ist alles in der Übersicht (a etwas oberhalb der Mitte durch)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top