2017-12-21 34 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

このエラーが発生しました:TemplateSyntaxError at /todo/global_activities.html 'my_template_tags'は登録済みのタグライブラリではありません。次のいずれかである必要があります: – SJ19

+0

いいえ、あなたは 'models.py'に追加する必要はありません。 'my_template_tags.py'を作成するときは、' templatetags'という名前のフォルダに '__init __。py'という名前のフォルダの下に、インストールされているアプリ内になければなりません。構造については、https://docs.djangoproject.com/en/2.0/howto/custom-template-tags/#code-layout –

関連する問題