私のアプリケーションにリクエストがあるたびに、私はミドルウェアを使って特定のページに関連する情報を持つ「ページ」オブジェクトを検索して保存しています。私はここで、リクエストオブジェクトで、このオブジェクトへの参照を格納しています例です。テンプレートタグとリクエストオブジェクト
class PageMiddleware(object):
def process_request(self, request):
if not hasattr(request, 'page'):
request.page = Page.objects.get(slug=<slug>)
return None
それは十分に動作しますが、私はテンプレートタグで、このオブジェクトにアクセスしたいです。テンプレートタグは「コンテキスト」の考えを参照するだけです。つまり、私はPageオブジェクトを見ることができません。
私はこれにカスタムコンテキストプロセッサを使用できますが、これは設定ファイルをさらに変更することを意味し、このアプリケーションを可能な限りカプセル化しておきたいと思います。たとえば、デバッグツールバーアプリケーションは、TEMPLATE_CONTEXT_PROCESSORSを変更せずにテンプレートコンテキストにデータを追加することができます。要するに、ミドルウェアを使用するだけで、理想的にはテンプレートタグのPageオブジェクトにアクセスしたいと考えています。何か案は?
編集:私は次のクラスで、標準のテンプレートタグを使用しています:
class GetPageContentNode(Node):
def __init__(self, key):
self.key = key
def render(self, context):
return context['request'].page
感謝を。私は元の記事で、私が標準タグを使用していて、包含タグではないと言っていたはずです。コンテキスト['request']を呼び出すと、キーエラーが発生します。 – Hanpan
これは通常のテンプレートタグでも機能します。インクルードとシンプルなテンプレートタグは、通常のテンプレートタグのラッパーにすぎません –