Django: передача контекстных данных между html-файлом в разных приложениях

Как я могу передать контекстные данные (в данном случае переменную profile_total), созданные в одном из моих представлений, в html-шаблон другого приложения? Вот мой код:

app1.views.py

def view_profile(request):
    profile_total = UserProfile.objects.all().count()
    return render(request, 'profile/user_profile.html', {'profile_total': profile_total})   

app2.stats.html

<div class="container">
<h1> Show </h1>
Profile submitted: {{ profile_total }}
</div>

Сейчас отображается только пустое место, а не количество отправленных профилей. Спасибо всем за помощь!

Вы, вероятно, ищете контекстный процессор. Это функция, которая будет выполняться каждый раз при рендеринге шаблона, мы можем использовать такой контекстный процессор с:

# app_name/context_processors.py

def profile_total(request):
    from app_name.models import UserProfile
    return {'profile_total': UserProfile.objects.all().count}

Мы не вызываем .count() метод [Django-doc] здесь, чтобы отложить оценку запроса. Таким образом, мы выполним запрос к базе данных только в том случае, если вы render profile_total в шаблоне.

Теперь мы можем зарегистрировать контекстный процессор с;

# settings.py

# …

TEMPLATES = [
    {
        # …,
        'OPTIONS': {
            'context_processors': [
                # …,
                'app_name.context_processors.profile_total'
            ],
        },
    },
]

и затем мы можем использовать profile_total во всех шаблонах, если мы рендерим его с помощью {{ profile_total }}.

Вернуться на верх