سؤال

لدي مشكلة غريبة ، في ملف الإعدادات الخاص بي ، يتم تمكين كل شيء يجب تمكينه من أجل user.is_authenticated استخدام في قالب.

لدي رمز علامة القالب التالي:

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 )

والقالب (menu.html) كما يلي:

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

لكنه يعود دائمًا لم يتم تسجيل الدخول حتى عندما قمت بتسجيل الدخول ... هل لدى أي شخص أدنى فكرة عن الخطأ في هذا الرمز؟

شكرا لك مقدما.

تحياتي ، bloeper

هل كانت مفيدة؟

المحلول 3

بادئ ذي بدء ، شكرًا على كل المساعدة. لقد وجدت الحل بفضلكم جميعًا :) اتضح أنني بحاجة إلى تمرير كائن الطلب في كل عرض وأحتاج إلى وضعه كوسيطة في علامة القالب الخاصة بي. رمز الحل:

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 )

شكرا للمساعدة :)

نصائح أخرى

هل تملك django.core.context_process.auth في template_context_processors إعداد؟

شيء آخر يجب تجربته هو بناء جملة Render_to_reponse. وفقا للمستندات ، يجب أن يكون

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

هل لديك أي معالجات سياق أخرى مسجلة؟ هل وضعوا user?

أوصي التشغيل تحت خادم DEV والقيام بشيء مثل:

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

إذا لم تحصل على القيم التي تتوقعها ، فأنت بحاجة إلى الحفر بشكل أعمق. ما يلي يجب أن يتكرر من خلال جميع ديكتات السياق ويظهر لك أي واحد (ق) يحتوي على قيمة لـ "المستخدم". أول واحد سيكون ما يراه القالب.

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

هل لديك django.contrib.auth و django.contrib.sessions في ملف الإعدادات الخاص بك؟

أين هو الكود الفعلي الذي يتحقق إذا تم مصادقة المستخدم؟ إذا قمت بالتحقق من ذلك في القالب ، فيجب عليك تقديم بعض التعويذة عند تمرير المعلمات من العرض إلى القالب. بالنسبة لي ، يعمل عندما أفعل هذا في الأعلى:

from django.contrib.auth.decorators import login_required

وتزيين جميع وجهات النظر حيث من المهم ، على سبيل المثال:

@login_required
def get_hoofd_menu( ):

كل شيء مذكور في نظرة عامة (أعلى بقليل من منتصف الطريق)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top