Как я могу вернуть контекст из 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, а не выполняем новый запрос к базе данных!

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