Как описано в комментариях, приведен пример повторного использования результата из конечной точки api в обычном представлении Django с помощью функции Django resolve
.
views.py
import json
from django.core.urlresolvers import resolve
from django.views.generic.base import View
class FooView(View):
def get(self, request):
# optional stuff in your view...
##
# Resolving another Django view programmatically
##
rev = '/path/to/api/endpoint/' # or use reverse()
view, vargs, vkwargs = resolve(rev)
vkwargs['request'] = request
res = view(*vargs, **vkwargs)
c = Context({
'data': json.dumps(res.data)
})
# Now the JSON serialized result from the API endpoint
# will be available in the template variable data.
return render(request, 'my-app/my-template.html', c)
мой-template.html
<script>
var data = {{ data }};
</script>
Примечание 1: Вместо жесткого кодирования путь в rev = '/path/to/api/endpoint/'
лучше reverse()
URL-адрес, но я оставил его, чтобы удалить это как источник ошибок. Если вы собираетесь в этом направлении, здесь a list имен URL-адрес по умолчанию, предоставленных ФПИ
Примечание 2: Сниппет выиграют от обработки исключений, как убедитесь, что res
возвращается 200, имеет data
собственности и т.д.
Как вы хотите визуализировать/создавать этот шаблон? Очевидно, конечная точка DRF предоставит вам некоторые данные (в данном случае в JSON). Чтобы статически отобразить этот JSON на сервере, вы можете создать обычное представление Django, которое будет предоставлять ваш шаблон. Из этой точки зрения вы можете запросить данные с конечной точки DRF. Я предполагаю, что позже какой-нибудь Javascript на интерфейсе возьмет контроль над вашим webapp, и именно поэтому вам нужен REST API в первую очередь? – sthzg
Да, я могу сериализовать JSON в python в представлении. Я прыгал, был более простой способ сделать это в шаблоне напрямую. В самом деле, позже javascript сделает дальнейшие запросы к конечной точке REST. – Rems
Является ли ваша цель избегать дополнительного представления вообще или просто для того, чтобы не создавать тот же вывод, который конечная точка DRF уже предоставляет в этом дополнительном представлении? В последнем случае вы можете использовать помощник Django ['resolve'] (https://docs.djangoproject.com/en/1.8/ref/urlresolvers/#resolve) для повторного использования JSON-вывода из DRF в вашем представлении и, таким образом, все еще держите его СУХОЙ. (Я мог бы привести пример) – sthzg