Поиск…


замечания

Используйте контекстные процессоры для добавления переменных, доступных в любом месте шаблонов.

Укажите функцию или функции, которые возвращают dict s переменных, которые вы хотите, затем добавьте эти функции в TEMPLATE_CONTEXT_PROCESSORS .

Используйте контекстный процессор для доступа к параметрам. DEBUG в шаблонах

в myapp/context_processors.py :

from django.conf import settings

def debug(request):
  return {'DEBUG': settings.DEBUG}

в 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 }}

Использование контекстного процессора для доступа к вашим последним блогам во всех шаблонах

Предполагая, что у вас есть модель под названием Post определенная в файле models.py который содержит сообщения в блоге, и имеет поле 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. Добавьте обработчик контекста в ваш файл настроек.

Убедитесь, что вы добавили новый процессор контекста в файл settings.py в переменной TEMPLATES :

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'myapp.context_processors.recent_blog_posts',
            ],
        },
    },
]

(В версиях Django до 1.9 это было задано непосредственно в settings.py с помощью переменной TEMPLATE_CONTEXT_PROCESSORS .)


Шаг 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>

Расширение шаблонов

Контекстный процессор для определения шаблона на основе членства в группе (или любого запроса / логики). Это позволяет нашим публичным / обычным пользователям получать один шаблон и нашу специальную группу, чтобы получить другую.

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