2010-01-06 3 views
0

내 Django 응용 프로그램 (다른 위치에서 유지 관리)에서 제 템플릿의 태그를 사용하여 사용자 이름을 문자열로 사용할 수 있습니다. 이. 이 장고 DB에있는 경우 나, 장고 사용자 개체로 변환 할 필요가, 또는 내가 할 수없는 경우 등록 varible 설정 - {{사용자}} 문자열로 반환되기 때문에문자열 사용자 이름을 검색하여 사용자 객체로 반환하는 사용자 정의 Django 템플릿 태그

{% for user in gr.user.foll.list %} 

{{user}} 

문제입니다 같은 일이 :

{% webapp_user_lookup user %} # my custom tag 
    {% ifnot unRegistered %} 
    {{ user.get_profile.about }} # get profile information - would fail with a string 
    {% endifnot %} 
{% endfor %} 

내가보기에 사용자를 찾기 위해 다른 곳에서 사용하는 코드는 다음과 같습니다

{ user.get_profile.about }} # get profile information 

그래서 나는이 같이 사용할 수 있도록 내가 처음 장고 템플릿 태그를 작성합니다 생각 :

try: 
     user = User.objects.get(username__iexact=user) 
     unRegistered = False 
     if not other_user.is_active: 
       unRegistered = True 
except: 
     unRegistered = True 

그러나 나는 문제가 가장 사용자 정의 템플릿 태그를 구조 내 문자열 이름을하는 방법을 이해하는 데 장고 템플릿 태그 예보고 - 그들은 존재하는 경우 객체로 결과를 다시 보내거나 설정을 varible과 그렇지 않으면 원래 문자열. 구조가 어떻게 작동하는지, 그리고 '클래스'가 필요한지 이해하고 싶다면 그렇습니다. 그렇다면 왜 그렇습니까? (나는 프로그래밍에 익숙하지 않다.) 당신의 user_template_tags.py에서

{{username|get_user}} 

: 템플릿 필터 그래서 같은

답변

3

사용

from django import template 
from django.contrib.auth.models import User 

register = template.Library() 

######################## 

def get_user(username): 
    try: 
     user = User.objects.get(username__iexact=username) 
    except User.DoesNotExist: 
     user = User.objects.none() 
    return user 

register.filter('get_user',get_user) 

다음 템플릿에서 당신은 같은 것을 수행 할 수 있습니다

{% with username|getuser as user %} 
{% if user %}DO USER STUFF 
{% else %}DO UNREGISTERED STUFF 
{% endif %} 
{% endwith %} 
+0

메모를 어디에 당신이 {{user}}을 넣었습니다. {{username}} –

+0

또한, 사용자가 저장 한 것을 보상하지 않았다면 ethod에서 django는 JOESHMO라는 사용자 이름과 joeshmo라는 이름을 저장하여 오류를 발생시킬 수 있습니다. 처리되지 않으면 "User.DoesNotExist"부분을 벗어날 수 있습니다. –

+0

Brandon 이것은 정말 단순 해 보이고 코드를 이해할 수 있습니다. 이제는 그 코드를 가지고 놀아 볼 것입니다. 분명한 예를 쓸 시간을내어 주셔서 감사합니다. –

관련 문제