サーチ…


備考

コンテキストプロセッサを使用して、テンプレート内のどこにでもアクセス可能な変数を追加します。

関数を指定する、または返す関数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 %}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow