2013-08-16 7 views
11

Wie django resframework Antwort für jede Anfrage an HTML übergeben. Beispiel: Eine Liste, die Objekte enthält, und HTML ist articles.html.Wie Django Rest Framework Antwort an HTML übergeben?

Ich habe versucht, durch Ruhe Rahmen Antwort mit:

data= {'articles': Article.objects.all() } 
return Response(data, template_name='articles.html') 

ich diese Störung erhalte:

""" AssertionError at /articles/ 

.accepted_renderer not set on Response """ 

Wo ich falsch gelaufen ist, kann man mich vorschlagen.

+0

http://django-rest-framework.org/api-guide/renderers.html Geben Sie für HTML-Renderer – Denis

+0

Der Link oben nicht funktioniert, aber man sollte: http: //www.django -rest-framework.org/api-guide/renderers/ – rschwieb

Antwort

33

Wenn es eine Funktion basiert Ansicht ist, machte benötigen Sie einen @api_view Dekorateur zu verwenden, korrekt angezeigt werden. Ich habe gesehen, dass dieser spezielle Fehler aus genau diesem Grund auftritt (fehlende API-Anzeige in funktionsbasierten Ansichten).

from rest_framework.decorators import api_view 
# .... 

@api_view(['GET', 'POST', ]) 
def articles(request, format=None): 
    data= {'articles': Article.objects.all() } 
    return Response(data, template_name='articles.html') 
1

Sie verfehlten TemplateHTMLRenderer Dekorateur:

 
@api_view(('GET',)) 
@renderer_classes((TemplateHTMLRenderer,)) 
def articles(request, format=None): 
    data= {'articles': Article.objects.all() } 
    return Response(data, template_name='articles.html') 
+0

Ich bekomme immer einen TypeError: ist nicht serialisierbar JSON. Alles scheint genau so zu sein, wie Sie es vorschlagen. – Bobort

5

In meinem Fall vergessen, nur @api_view gesetzt ([ 'PUT']) auf View-Funktion.

So,
.accepted_renderer
The renderer instance that will be used to render the response not set for view.
Set automatically by the APIView or @api_view immediately before the response is returned from the view.

Verwandte Themen