2017-03-17 10 views
0

ウェブサイト(またはアプリ)タイトルなどのサイト全体(またはアプリ全体)変数を設定する方法を探していますが、私のテンプレート(例えば、私のヘッダーの中)で使うことができます。私はワードプレスのようなものを持っています。bloginfo()を念頭に置いてください。Django - テンプレートで使用するサイト全体の変数を設定して使用する

理想的には、サイトやアプリのレベルで任意のタイプの属性を定義できます。与えられたアプリの場合は、例えば、私が持っていると思います:

アプリ

--attribute1(タイトル)

--attribute2(例えば連絡先のメール)

--Model1

---- AttributeX

---- AttributeY

- ---

"attribute1"は私のアプリケーションに固有のことを意味します。私は私のテンプレートのattribute1の値を使用する方法が必要になります。 私の質問がはっきりしていることを願っています。

答えて

1

私はサイト全体またはアプリケーション全体の変数を常に使用していますcontext processors

context_processors.pyという名前の独立したファイルを作成します(そのような名前は必須ではありません)。このファイルでは、requestパラメータを受け入れて返す少なくとも1つの関数を定義する必要があります辞書。

そのような何か:今

# yourapp/context_processors.py 

def static_vars(request): 
    return = { 
     'var1': 'Hello', 
     'var2': 'World', 
    } 

あなたが{{ var1 }}として、テンプレート内の変数にアクセスする前に、あなたはこのようなTEMPLATES設定にこの関数を渡す必要があります。

# settings.py 

TEMPLATES = [ 
{ 
    'BACKEND': 'django.template.backends.django.DjangoTemplates', 
    'DIRS': [ 
     # dirs here 
    ], 
    'OPTIONS': { 
     'context_processors': [ 
      # some other context processors here and ... 
      'yourapp.context_processors.static_vars', 
     ], 
     'loaders': [ 
      # loaders here 
     ], 
    }, 
}, 

]

今、すべてのテンプレートで公開する変数static_varsを使用できます。

+0

これを管理者に引き継ぐ方法はありますか?たとえば、サイトの管理者がウェブサイトのタイトルを変更できるようにすること(または字幕の入力ミスを修正すること)は意味があります。 – GuitarExtended

+0

すでに「フック」されています。それはあまりにも管理者で動作します! –

+0

私はあなたが提案したことをしました。しかし、管理者はこれらの静的変数を見ることはできません。何とかadmin.pyに登録しなければなりませんか?申し訳ありませんが、これらのnoobのコメントのために、私はコンテキストプロセッサについて知っています。 – GuitarExtended

1

テンプレートでこれらの変数を使用する場合は、context processorsをご覧ください。最も簡単な解決策は、アプリケーションまたはプロジェクトにcontext_processors.pyを追加して、このファイルのパスを設定内のコンテキストプロセッサのリストに追加することです。

関連する問題