2011-05-03 2 views
1

templatetag를 통해 사용자 개체를 내 서식 파일로 전달하려고합니다. 나는 처음에 simple_tag를 시도했지만 분명히 문자열만을위한 것일까?사용자 개체가 포함 된 Django Templatetag

templatetags/profiles.py를이 내가 그것을 테스트하기 위해 내 템플릿에 무엇을 가지고

from django.template import Library, Node, Template, VariableDoesNotExist, TemplateSyntaxError, \ 
          Variable 
from django.utils.translation import ugettext as _ 
from django.contrib.auth.models import User 
from django.conf import settings 
from django.core.exceptions import ImproperlyConfigured 
from django.db import models 



class userlist(Node): 
    def __init__(self, format_string): 
     self.format_string = format_string 
    def render(self, context): 
     try: 
     users = self.format_string 
     return users 
     except VariableDoesNotExist: 
      return None 


def get_profiles(parser, token): 
    return userlist(User.objects.all()) 

register = Library() 
register.tag('get_profiles', get_profiles) 

:

{% load profiles %} 
{% get_profiles %} 
{% for p in get_profiles %} {{ p }} {% endfor %} 

난 단지 [, , , , ]가 인쇄받을 어쨌든 이것은 내가 지금까지 무엇을 가지고 또는 User.objects.all()User.objects.count()으로 변경하면 정확한 번호를 얻습니다. 내 템플릿의 반복은 아무 것도하지 않는 것 같습니다. 뭐가 잘못 되었 니?

+0

User.objects.get (사용자 이름 = '테스트')와 같은 템플릿 태그를 필요로하는 것은 나에게 사용자를 제공합니다 "테스트"제대로 또한. 모든 객체를 전달하려고 시도하고 반복 할 때 템플릿에 루프를 사용하면 아무 것도 얻을 수 없습니다. – leffe

답변

0

형식 문자열이란 무엇입니까? 당신은 다음과 같은 템플릿 태그를 호출해야합니다

{% get_all_users as allusers %} 
{% for user in allusers %} 
    {{ user.first_name }} 
{% endfor %} 

그래서 당신이

class GetAllUsers(Node): 
    def __init__(self, varname): 
     # Save the variable that we will assigning the users to 
     self.varname = varname 
def render(self, context): 
     # Save all the user objects to the variable and return the context to the template 
     context[self.varname] = User.objects.all() 
     return '' 

@register.tag(name="get_all_users") 
def get_all_users(parser, token): 
    # First break up the arguments that have been passed to the template tag 
    bits = token.contents.split() 
    if len(bits) != 3: 
     raise TemplateSyntaxError, "get_all_users tag takes exactly 2 arguments" 
    if bits[1] != 'as': 
     raise TemplateSyntaxError, "1st argument to get_all_users tag must be 'as'" 
    return GetAllUsers(bits[2]) 
+0

{% get_all_users as allusers %} 이렇게하면 렌더링하는 동안 잡히는 TypeError를 얻을 수 있습니다. unhashable type : 'list'. 나는 get_all_users %에서 사용자를 {%} {{user}} {% endfor %} (을)를 시도했습니다. 불평하지는 않지만 아직 인쇄하지 않습니다. – leffe

+0

도움 주셔서 감사합니다. return GetAllUsers (비트) 을 GetAllUsers (비트 [2])를 반환하도록 변경해야했지만 그렇지 않은 경우에는 완벽했습니다. 다시 한 번 감사드립니다! – leffe

+0

아아, 그것을 반영하기 위해 게시물을 편집했습니다! –

관련 문제