2016-12-01 13 views
1

すべてのテンプレートで共通の変数を使用したいと考えています。Djangoでテンプレートにグローバル変数を使用できるようにする

class GetNameMiddleware(object): 

    def __init__(self, get_response): 
     self.get_response = get_response 

    def __call__(self, request): 
     response = self.get_response(request) 
     return response 

    def process_template_response(self, request, response): 
     response.context_data['name'] = 'dave' 
     return response 

と、このようなビューがあります:私はすべての朝、私はそれがこのようなミドルウェアを持つことですやって見つけることができる唯一の方法はこれに取り組んできました、その後

from django.template.response import TemplateResponse 
from django.shortcuts import render 

def home(request): 
    return TemplateResponse(request, 'home.html', {}) 

をし、Iそれはちょうど私がrenderを使用できないことを少し醜いようだ

Hello {{ name }} 

テンプレートにアクセスすることができ、それ以上(私はfrom django.template.response import TemplateResponse as renderを行うことができます知っているが、それは本当にありません溶液)

(ジャンゴ1.10、パイソン3.5.2)

+0

_why_について何か追加してもらえますか?なぜなら、通常は別の方法で解決されると思うからです。 – RemcoGerlich

+0

はい。私は英国の外にいる人々のためにサイト全体にメッセージを表示したい。メッセージには次のような共通データが必要です:{%if country_code!= 'UK'%} ... {%endif%} ' – Sevenearths

+1

私は[giorgosp](http://stackoverflow.com/users/2924320/giorgosp)に同意します[カスタムコンテキストプロバイダ](https://docs.djangoproject.com/en/1.10/ref/templates/api/#writing-your-own-context-processors)を参照してください。ここには[役に立つブログ記事](http://www.b-list.org/weblog/2006/jun/14/django-tips-template-context-processors/)があります。その投稿は日付が記されていますが、コンテキストプロバイダの機能性については契約は変わりません。 –

答えて

7

Djangoは、コンテキストプロセッサであり、これを実現するための標準的な方法を有します。この記事では、実装例を示します。 https://www.webforefront.com/django/setupdjangocontextprocessors.html

実際にコンテキストプロセッサは、要求オブジェクトを受け取り、必要なデータを含むdictを返す単なる関数です。

+0

コンテキストプロセッサはまさに私が探していたものです。仕事は終わった! – Sevenearths

関連する問題