2013-11-29 2 views
4

나는 django app 용 템플릿 엔진으로 jinja2를 사용하고 있습니다. 템플릿에서 쿼리를 만들고 싶었습니다. 나는 이것을 시도 :템플릿에서 쿼리 만들기

{% for f in fs %} 
    {% Following.objects.filter(follows=f).count() %} 
{% endfor %} 

나는 템플릿을 렌더링하는 동안 변수에 'fs'를 전달하고있다.

하지만 잘못된 것입니다. 내 모델이 정의 된 방식 때문에 'query_set'호출을 수행 할 수 없습니다. 스 니펫은 다음과 같습니다.

class Following(models.Model): 
    user = models.ForeignKey(User) 
    follows = models.ForeignKey(F) 

class F(models.Model): 
    name = models.CharField(max_length=50) 

이렇게 할 수있는 방법이 있습니까?

답변

1

을 수행 할 수 있습니다 그렇지 왜 그런지 말하지 마라.

그럼에도 불구하고 별도의 방법을 정의 할 필요가 없습니다. 자동 반전 관계 액세서를 사용할 수 있습니다.

{{ f.following_set.count() }} 
+0

고맙습니다. 이것은 내가 사용했던 것입니다 : {{f.following_set.count}} [카운트 후 괄호 없음]. 그리고 죄송 합니다만, 나는 실수로 jinja2를 썼습니다. 사실 저는 보통의 Django 템플릿 언어를 사용하고 있습니다. – toothie

+1

Django 템플릿은 괄호를 허용하지 않고 자동으로 메소드를 호출하지만 Jinja에서는 괄호가 필요합니다. –

0

django 템플릿에서 매개 변수를 취하는 메소드를 호출 할 수 없습니다. 이를 극복하기 위해 F 모델에서 메소드를 정의하여 필요한 수를 얻을 수 있습니다.

예를 들면 : 당신이 정상적인 장고 템플릿 언어보다는 jinja2를 사용하는 경우

class F(models.Model): 
    name = models.CharField(max_length=50) 
    def get_follow_count(self): 
     Following.objects.filter(follows=self).count() 

다음 템플릿에서 당신은 무엇을 당신이하는 일을한다,

{% for f in fs %} 
    {{ f.get_follow_count }} 
{% endfor %}