Как я могу вернуть контекст из views.py в разных html-файлах в Django?
Итак, у меня есть метод под названием 'room' в моем файле views.py.
Я могу получить доступ к этой комнате только на моей странице room.html, поскольку я возвращаю ее туда, но я хотел бы использовать эти данные и на моей индексной странице.
Как я могу это сделать?
Спасибо.
Views.py
def room(request):
rooms = Rooms.objects.all()
photos = RoomImage.objects.all()
context = {'rooms':rooms, 'photos':photos}
return render(request, 'hotelbook/room.html', context)
Я могу получить доступ к этой комнате только на моей странице room.html, так как я возвращаю ее туда, но я хотел бы использовать эти данные и на моей индексной странице.
Просто передайте Rooms.objects.all()
также в том представлении, которое рендерит шаблон index.html
.
Ниже приведен пример.
def index(request):
rooms = Rooms.objects.all()
photos = RoomImage.objects.all()
context = {'rooms':rooms, 'photos':photos}
return render(request, 'hotelbook/index.html', context)
Теперь вы также можете использовать rooms
в шаблоне index.html
.
Вы можете сделать одну вещь, просто создайте простую служебную функцию в views.py для получения всех комнат.
создайте файл utils.py в приложении django:
# utils.py
def get_all_rooms():
all_rooms = Room.objects.all()
all_photos = RoomImage.objects.all()
return {"rooms": all_rooms, "photos": all_photos}
Затем, импортируйте utils в файл views.py
# views.py
from .utils import get_all_rooms
data = get_all_rooms()
def room(request):
return render(request, "room.html", {"data": data})
def index(request):
return render(request, "index.html", {"data": data})
Это может быть очень эффективно, так как мы вызываем результат cahced, а не выполняем новый запрос к базе данных!