Как заполнить шаблон без моделей?
Использую Django REST
, python 3.4
, Angular JS
.
Предположим, есть 4 страницы в виде шаблонов: main.html, page1.html, page2.html, page3.html
.
На странице main
отображается список, который получается из запроса к базе данных. При выборе какого-либо пункта необходимо осуществлять переход на страницу page1
, и на ней отображать список, полученный также из результатов выполнения запроса к базе данных (база данных не Django), но уже с учетом выбранного на странице main пункта, т.е. передать несколько параметров в REST
, заполнить шаблон page1.html
результатами выполнения запроса и отобразить итоговую страницу.
Далее при выборе пункта осуществлять аналогично переход на страницу page2
, с нее на page3
и т.д.
Просто делать у пунктов ссылки вида
/page1/type=sometype&id=1
на странице main
,
на page1 — /page2/type=secondtype&id=6
и т.д? Какого типа лучше использовать класс для обработки запросов — APIView
?
Пытаюсь использовать APIView
, перехожу по ссылке вида /page1?id=1
Вот пример без type
параметра, только с id
:
class SomeAPI(APIView): permission_classes = [permissions.AllowAny] def get(self, request, *args, **kwargs): if (request.GET.get('id',None)): ... # result = получаю из базы данных набор записей на основе id return Response({'res':result}, template_name="page1.html")
в urls.py: url(r'^page1'), SomeAPI.as_view()
В шаблоне page1.html
... <tr ng-repeat="item in res"> {{item}} ...
Записи возвращаются верно (т.е. с получением данных из БД проблем нет), но отображаются не в шаблоне page1.html
, а на странице стандартного шаблона REST API
в виде JSON-структуры
.
{ "res": [ { "item": "1" }, { "item": "2" }, { "item": "3" }, { "item": "4" } ] }
По сути мне нужно объединить функционал TemplateView
+ APIView
. Можно было бы аналогично, как на странице main, из контроллера AngularJS
запрашивать у APIView JSON
результат методом GET
, и заполнять template
. Но для page1, page2, page3
нужно использовать id
. Передать запросом GET
его не проблема, и сформировать ответ в APIView
тоже, но как передать в контроллер для страницы page1
этот id
со страницы main
, например? И как заполнить на основе JSON-ответа шаблон?
Чтобы отправить словарь в шаблон, нужно использовать TemplateHTMLRenderer
в параметре renderer_classes
,а сам шаблон добавляется в параметр template_name
from rest_framework.renderers import TemplateHTMLRenderer from rest_framework.response import Response from rest_framework.views import APIView class SomeAPI(APIView): renderer_classes = [TemplateHTMLRenderer] template_name = 'page1.html' def get(self, request, *args, **kwargs): ... return Response({'res':result})
Документация по работе с шаблонами
Вообще лучше разделить бекенд и фронтенд, роутинг настроить в Angular, а REST использовать только для отправки данных.