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