2011-12-29 4 views
0
내가 ( another site의 도움으로) 내보기에서 개체를 만드는거야

:장고 템플릿 구문 분석

{8L: {33L: <Author: Poe>}, 21L: {32L: <Book: The Great Gatsby>, 7L: <Book: Great Expectations>}, 22L: {7L: <Quote: Hamlet>}} 

을 8 인 경우 :이 읽기 내 템플릿 객체를 전달

def myfavorites(request): 

    queryset = Favorite.objects.favorites_for_user(user=request.user).select_related('content_type', 'content_object') 

    generics = {} 
    for item in queryset: 
     generics.setdefault(item.content_type_id, set()).add(item.object_id) 

     content_types = ContentType.objects.in_bulk(generics.keys()) 

     relations = {} 
     for ct, fk_list in generics.items(): 
      ct_model = content_types[ct].model_class() 
      relations[ct] = ct_model.objects.in_bulk(list(fk_list)) 

     for item in queryset: 
      setattr(item, '_content_object_cache', 
       relations[item.content_type.id][item.object_id]) 

     return render_to_response('myfavorites.html', { 
      'favorites':relations 
     }, 
     context_instance=RequestContext(request)) 

을 저자 테이블의 ID 21은 My Book 테이블의 ID이고, 22는 My Quote 테이블의 ID입니다.

나는 그것을 읽는 있도록 객체 목록을하기 위해 노력하고있어 :


위대한 개츠비
큰 기대

저자

제품 번호 :

햄릿은 어떻게 장고 템플릿에서이 객체를 구문 분석? 당신은 쉽게 이런 식으로 뭔가를 할 수있는, 그런

:

+0

뷰에서 개체를 변형 할 수 있습니까, 아니면 순수한 템플릿 솔루션이어야합니까? – SingleNegationElimination

+0

원래보기를 표시하도록 편집했습니다. 보기를 변형 시키는데 도움이 되었습니까? –

+0

내 답변 맨 아래에보기에서 개체 (관계)를 구문 분석하고 템플릿으로 보낼 개체를 분할 할 수 있어야한다고 나와 있습니다. render_to_response ('myfavorites.html', { 'authors': relations [8], 'books': 관계 [21], 'quotes': relations [22] }와 같은 render_to_response 호출에서이 작업을 수행 할 수 있습니다. , '8L에 8을 사용할 수 있는지 확인해야 할 것입니다. 8L 21L과 22L로 변환해야 할 수도 있습니다 [8/21/22] 관계의 일부 반환. – Furbeenator

답변

0

는 좀 더 다음과 같이 구성되어 문맥을 전달할 것

<h1>Authors</h1> 
{% for author in authors %}{{ author }}{% endfor %} 

<h1>Books</h1> 
{% for book in books %}{{ book }}{% endfor %} 

<h1>Quotes</h1> 
{% for quote in quotes %}{{ quote }}{% endfor %} 
+0

편집 된 질문 원래보기로 표시 보기 전환에 대한 도움이 필요하십니까? –

0

별도로 템플릿에 사전을 보냅니다. 하나의 저자 사전, 도서 사전 및 인용 사전을 보냅니다. 그런 다음 각각을 개별적으로 파싱 할 수 있습니다. a.name 필드를 저자 모델의 이름 필드로 바꾸고 책의 이름 필드에 b.name을 입력하고 인용구의 문자열 필드에 q.quote을 입력합니다. 그래서 같이 : 당신은 개별 데이터의 제어가없는 경우

<div class="title">Authors</div> 
{% for a in Authors %} 
    <div>{{ a.name }}</div> 
{% endfor %} 

<div class="title">Books</div> 
{% for b in Bookss %} 
    <div>{{ b.name }}</div> 
{% endfor %} 

<div class="title">Quotes</div> 
{% for q in Quotes %} 
    <div>{{ q.quote }}</div> 
{% endfor %} 

, 당신은 템플릿에 전달하는 뷰에서 개체를 구문 분석 할 수 있습니다 : 템플릿에

Authors = object['8L'] # Not positive about the Long, may need to convert. 
Books = object['21L'] # Not positive about the Long, may need to convert. 
Quotes = object['22L'] # Not positive about the Long, may need to convert. 

돌아 가기이 변수.

+0

내 질문을 편집하여 원래보기로 표시했습니다. 우선 순위는 각 테이블에 대해 한 번씩 세 번 데이터베이스를 치는 것이 아니며,보기 변환에 대한 도움이 필요합니까? –

+1

데이터베이스 만 사용 하시겠습니까? 한번 그대로?'content_type'은 일반적으로 이기종이며 여러 테이블에 분산되어 있습니다. 쿼리에 표시된 각 유형에 대해 select를 보는 것은 매우 정상입니다. 쿼리 로그에서 결과 SQL은 무엇입니까? – SingleNegationElimination

+0

네 말이 맞아, 내가 생각했던대로하지 않는거야. SQL 쿼리의 수를 제한하는 방법에 대한 제안이 있으십니까? –