web-dev-qa-db-fra.com

Comment passer Django reste la réponse du framework au html?

Comment passer Django réponse restframework pour toute demande à html. Exemple: Une liste qui contient des objets, et html être articles.html.

J'ai essayé en utilisant le cadre de repos Réponse:

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

Je reçois cette erreur:

""" AssertionError at /articles/

.accepted_renderer not set on Response """

Où je me suis trompé, veuillez me suggérer.

20
Girish Ns

S'il s'agit d'une vue basée sur une fonction, vous avez dû utiliser un décorateur @api_view pour afficher correctement. J'ai vu cette erreur particulière se produire pour cette raison exacte (déclaration API View manquante dans les vues basées sur les fonctions).

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')
50
Lucas H

Dans mon cas, j'ai juste oublié de définir @api_view (['PUT']) sur la fonction d'affichage.

Alors,
.accepted_renderer
L'instance de rendu qui sera utilisée pour rendre la réponse non définie pour la vue.
Défini automatiquement par APIView ou @api_view immédiatement avant le retour de la réponse de la vue.

8
GrvTyagi

Avez-vous ajouté TemplateHTMLRenderer dans vos paramètres?

http://www.Django-rest-framework.org/api-guide/renderers/#setting-the-renderers

4
Tom Christie

TemplateHTMLRenderer décorateur:

 @ api_view (('GET',)) 
 @ renderer_classes ((TemplateHTMLRenderer,)) 
 def articles (demande, format = Aucun): 
 data = {'articles': Article.objects.all ()} 
 renvoie une réponse (data, template_name = 'articles.html') 
1
Pedro Vagner