2

オブジェクトのクエリセットを取得し、それらを現在のテンプレートのコンテキストで使用できるようにするテンプレート タグが必要です。私が見ることができることから、これは次のような simple_tag で可能です:

@register.simple_tag(takes_context=True)
def get_myobject_queryset(context, string_arg)
    myobjects = MyObject.objects.all()
    context['myobjects'] = myobjects
    return ''

この方法には欠点がありますか、または通常、私が望むものを達成するためのより良い方法はありますか? 私が質問するのは、これがごくありふれた作業だと思っていたものの回避策のように感じられるからです。

4

2 に答える 2

2

コンテキスト プロセッサを作成することを検討してください。

#myapp/contexts.py
def get_myobject_queryset(request):
    myobjects = MyObject.objects.all()
    return {'myobjects': myobjects}

TEMPLATE_CONTEXT_PROCESSORS 設定にプロセッサを追加することを忘れないでください。

#settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"myapp.contexts.get_myobject_queryset",)

次に、テンプレートで次のように変数にアクセスできます{{ myobjects }}

ドキュメント: https://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors

于 2013-11-07T16:42:43.203 に答える
1

タグ付けは問題ありませんが、assignment_tag代わりにデコレータを使用できます。

于 2013-11-07T16:50:58.023 に答える