2010-01-17 2 views
3

템플릿에 user.is_authenticated를 사용하도록 설정해야하는 모든 설정 파일에 이상한 문제가 있습니다. Django 템플릿 태그 + user.is_authenticated가있는 템플릿이 작동하지 않습니다.

나는 다음과 같은 템플릿 태그 코드가 있습니다

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

그러나 내가 로그인 한 때 항상 심지어 로그인하지 않음 반환 다음과 같이

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를)입니다 in ... 누구든지이 코드에 어떤 문제가 있는지 실마리가 있습니까?

미리 감사드립니다.

인사말, Bloeper

+0

업데이트 : 코드 내가 게시 동일한 (하나입니다 ...하지만 지금은 오류가 ... 그래서 개선입니다.그것은 말합니다 : 렌더링하는 동안 예외가 발생했습니다 : 글로벌 이름 '요청'이 정의되지 않았습니다 그리고 응답 부분에 렌더링됩니다 : – Bloeper

답변

2

우선 모든 도움에 감사드립니다. 여러분 모두에게 감사의 해결책을 찾았습니다 :) 모든 뷰에서 요청 객체를 전달해야하고 템플릿 태그에 인수로 넣어야했습니다. 솔루션 코드 : 알에 대한

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) 

도움 주셔서 감사 :)

+0

그렇다면 어떻게 템플릿에서 UR 태그를 호출 할 수 있습니까? 요청 매개 변수를 제공해야합니다! '{% get_hoofd_menu 요청 %}'맞습니까? 템플릿에서 요청을받는 방법은 무엇입니까 ?? – Armance

0

당신이 파일을 귀하의 설정에서 django.contrib.auth 및 django.contrib.sessions을해야합니까?

+0

그래, 둘 다 내 설치된 응용 프로그램 목록에 있습니다 – Bloeper

+0

이상합니다. 당신은 정말로 로그인 했습니까? login() 함수로 로그인합니까? – Timo

+0

예 로그인을했는지, 로그인 기능을 사용하고 있는지 확인합니다. 하지만 user.is_authenticated가 아닌 사용자로 변경하면 ..... 그러면 Jeeej가 로그인 한 메시지가 항상 표시됩니다. 따라서 user.is_authenticated가 제대로 작동하지 않습니다. – Bloeper

3

django.core.context_processors.authTEMPLATE_CONTEXT_PROCESSORS이 있습니까?

또 다른 시도는 render_to_reponse 구문입니다. 문서에 따르면, 그것은이어야합니다

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

그래, 난 내 설정 파일에 대한 모든 필요한 물건을 가지고 (지금까지 내가 장고 워드 프로세서 – Bloeper

+0

(확인할 다른 것을 추가)에서 읽을 수 –

+0

글쎄 처음부터 코드가 뭐냐 ... 하지만 – Bloeper

0

여기서 사용자가 인증되었는지 확인하는 실제 코드는 무엇입니까? 템플릿에서 확인하면 뷰에서 템플릿으로 매개 변수를 전달할 때 일부 indivcation을 제공해야합니다. 나를 위해 가 작동 나는 상단에이 작업을 수행 할 때

from django.contrib.auth.decorators import login_required 

하고 중요한 위치를 모든 뷰를 장식 예 :

@login_required 
def get_hoofd_menu(): 

그것은 모든 중간 통해 overview (약간 위에서 언급 한 것)

+0

그건 내가 의미하는 바가 아니야 ... 그것은보기가 아닙니다 ... 그것은 templatetag이며 로그인이 필요하지 않습니다. 로그인이 필요한 일부 항목에만 사용합니다. – Bloeper

+0

내가보기에 사용자를 포함하는 요청을 전달해야한다는 것을 잊어 버렸습니다. 뷰에 사용자를 전달해야합니다 (예 : "get_hoofd_menu (request) :"로보기 정의). 그럴 수도 있습니다. 중요한 부분 –

+0

도움을 주셔서 감사합니다. 그러나 벌써 쓸데없이 그것을 시험해 보았습니다. ( – Bloeper

1

다른 컨텍스트 프로세서가 등록되어 있습니까? 그들은 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 
+0

dev server bu T는 내가 뭔가를 인쇄 할 때 콘솔에 표시되지 않습니다. 기본 컨텍스트 프로세서 만 실행합니다 – Bloeper

+0

흠 ... * something *이 표시되어야합니다. 보기 시작시 간단한'print "Foo!"'를 고수하려고합니다. 이것이 표시되지 않으면 이상한 것이 있습니다. 또한, 어떤 플랫폼 (Windows, Linux, Mac)을 사용할 수 있습니까? 어느 파이썬 버전? 어떤 장고 버전? –

+0

인쇄 "x"doenst 작업 중 하나 .. 그리고 그것은 그것의 templatetag보기가 아닙니다. 나는 파이썬 2.6과 장고 버전 1.1.1로 리눅스에서 일한다. 헴은 지금 물건을 돌려 준다 : S – Bloeper