Django
コンテキストプロセッサ
サーチ…
備考
コンテキストプロセッサを使用して、テンプレート内のどこにでもアクセス可能な変数を追加します。
関数を指定する、または返す関数dict
したい変数のsが、その後にこれらの機能を追加しTEMPLATE_CONTEXT_PROCESSORS
。
コンテキストプロセッサを使用してテンプレート内の設定.DEBUGにアクセスする
myapp/context_processors.py
:
from django.conf import settings
def debug(request):
return {'DEBUG': settings.DEBUG}
in settings.py
:
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
'myapp.context_processors.debug',
],
},
},
]
またはバージョン<1.9の場合:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'myapp.context_processors.debug',
)
私のテンプレートでは、単純に:
{% if DEBUG %} .header { background:#f00; } {% endif %}
{{ DEBUG }}
コンテキストプロセッサを使用して、すべてのテンプレートの最新のブログエントリにアクセスする
models.py
ファイルに定義されたPost
というモデルがあり、ブログ投稿を含み、 date_published
フィールドを持っているとdate_published
ます。
ステップ1:コンテキストプロセッサを書く
context_processors.py
という名前のファイルをアプリケーションディレクトリに作成(または追加)します:
from myapp.models import Post
def recent_blog_posts(request):
return {'recent_posts':Post.objects.order_by('-date_published')[0:3],} # Can change numbers for more/fewer posts
ステップ2:設定ファイルにコンテキストプロセッサを追加する
TEMPLATES
変数のsettings.py
ファイルに新しいコンテキストプロセッサを追加してください:
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
'myapp.context_processors.recent_blog_posts',
],
},
},
]
(Djangoの1.9より前のバージョンでは、これはTEMPLATE_CONTEXT_PROCESSORS
変数を使ってsettings.py
直接settings.py
ていました)。
ステップ3:テンプレートにコンテキストプロセッサを使用する
最近のブログエントリーを個々のビューを通してもう通す必要はありません!どのテンプレートでもrecent_blog_posts
を使用してください。
たとえば、 home.html
、最近の投稿へのリンクを含むサイドバーを作成することができます:
<div class="blog_post_sidebar">
{% for post in recent_blog_posts %}
<div class="post">
<a href="{{post.get_absolute_url}}">{{post.title}}</a>
</div>
{% endfor %}
</div>
またはblog.html
で各投稿の詳細な表示を作成することができます:
<div class="content">
{% for post in recent_blog_posts %}
<div class="post_detail">
<h2>{{post.title}}</h2>
<p>Published on {{post.date_published}}</p>
<p class="author">Written by: {{post.author}}</p>
<p><a href="{{post.get_absolute_url}}">Permalink</a></p>
<p class="post_body">{{post.body}}</p>
</div>
{% endfor %}
</div>
テンプレートの拡張
コンテキストプロセッサを使用して、グループメンバーシップ(または任意のクエリ/ロジック)に基づいてテンプレートを決定します。これにより、一般の/一般のユーザーは1つのテンプレートと特別なグループを取得して別のテンプレートを取得できます。
myapp / context_processors.py
def template_selection(request):
site_template = 'template_public.html'
if request.user.is_authenticated():
if request.user.groups.filter(name="some_group_name").exists():
site_template = 'template_new.html'
return {
'site_template': site_template,
}
コンテキストプロセッサを設定に追加します。
テンプレートでは、コンテキストプロセッサで定義された変数を使用します。
{% extends site_template %}