Szukaj…


Uwagi

Użyj procesorów kontekstowych, aby dodać zmienne, które są dostępne w dowolnym miejscu w szablonach.

Określ funkcję lub funkcje, które zwracają dict zmienne, a następnie dodaj te funkcje do TEMPLATE_CONTEXT_PROCESSORS .

Użyj procesora kontekstu, aby uzyskać dostęp do ustawień. DEBUG w szablonach

w myapp/context_processors.py :

from django.conf import settings

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

w settings.py :

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

lub, dla wersji <1.9:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'myapp.context_processors.debug',
)

Następnie w moich szablonach po prostu:

 {% if DEBUG %} .header { background:#f00; } {% endif %}
 {{ DEBUG }}

Korzystanie z procesora kontekstu w celu uzyskania dostępu do najnowszych wpisów blogu we wszystkich szablonach

Zakładając, że masz model o nazwie Post zdefiniowany w pliku models.py , który zawiera posty na blogu i ma pole date_published .


Krok 1: Napisz procesor kontekstowy

Utwórz (lub dodaj do) plik w katalogu aplikacji o nazwie 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

Krok 2: Dodaj procesor kontekstowy do pliku ustawień

Upewnij się, że dodajesz nowy procesor kontekstowy do pliku settings.py w zmiennej TEMPLATES :

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

(W wersjach Django wcześniejszych niż 1.9, ustawiono to bezpośrednio w settings.py przy użyciu zmiennej TEMPLATE_CONTEXT_PROCESSORS .)


Krok 3: Użyj procesora kontekstu w swoich szablonach

Nie trzeba już przekazywać najnowszych wpisów na blogu przez poszczególne widoki! Po prostu użyj recent_blog_posts na recent_blog_posts w dowolnym szablonie.

Na przykład w home.html możesz utworzyć pasek boczny z linkami do najnowszych postów:

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

Lub w blog.html możesz stworzyć bardziej szczegółowy sposób wyświetlania każdego postu:

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

Rozszerzanie szablonów

Procesor kontekstowy w celu ustalenia szablonu na podstawie członkostwa w grupie (lub dowolnego zapytania / logiki). Pozwala to naszym publicznym / zwykłym użytkownikom uzyskać jeden szablon, a naszej grupie specjalnej uzyskać inny.

myapp /ext_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,
    }

Dodaj procesor kontekstowy do swoich ustawień.

W szablonach użyj zmiennej zdefiniowanej w procesorze kontekstowym.

{% extends site_template %}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow