2017-12-21 6 views
0

Django 2.0에서 템플릿의 클래스에서 메서드를 호출하려고합니다. 템플릿에서Django/Python : 템플릿의 인수를 사용하여 모델/클래스 함수 호출

전화

class Activity(models.Model): 
    name = models.CharField(max_length=15) 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 

    def liked_by(self, user): 
     return Like.objects.filter(activity_id=self.id, user_id=user.id) 

클래스

에서

{% activity.liked_by(user) %} 

방법 나는 이것이 가능하지 알고,하지만 최고의 대안이 될 것인가? 사용자를 인수로 전달하지 않고 쿼리를 실행할 수있는 방법은 없습니다.

감사합니다.

+0

통화 '= test.method 결과 (사용자)'템플릿을 렌더링하고 템플릿 콘텍스트 결과를 추가 뷰이다. –

+0

@Blurp 고마워, 그렇지만 내가 말하는 곳에서 수업을 놓치고있어. – SJ19

+1

무슨 뜻인지 이해가 안됩니다. –

답변

2

템플릿에 전달 된 컨텍스트에서 쿼리를 제공하거나 custom template tag을 사용할 수 있습니다. 생성 된 파일이 my_template_tags.py이라고 가정합니다 (이 파일은 올바른 디렉토리 구조에 있어야 함).

from django import template 

register = template.Library() 

@register.simple_tag 
def get_method(test, user): 
    return Test.objects.filter(test_id=test.id, user_id=user.id) 

그리고 템플릿 :

{% load my_template_tags %} 
{% get_method test user %} 
+0

혼란 스럽습니다. 따라서 이것을 models.py에 추가하지 않으시겠습니까? – SJ19

+0

이 오류가 발생합니다. /todo/global_activities.html의 TemplateSyntaxError 'my_template_tags'이 (가) 등록 된 태그 라이브러리가 아닙니다. 다음 중 하나 여야합니다 : – SJ19

+0

아니요 'models.py'에 추가 할 필요가 없습니다. 'my_template_tags.py' 파일을 만들 때 설치된 패키지 안에'templateetags'라는 폴더 안에'__init __. py' 파일이 있어야합니다. 구조에 대해서는 https://docs.djangoproject.com/en/2.0/howto/custom-template-tags/#code-layout –

관련 문제