web-dev-qa-db-fra.com

Django: TemplateDoesNotExist (rest_framework/api.html)

Dans ma fonction de vue, je voudrais renvoyer un objet JSON (data1) et du texte/html (formulaire). Est-ce possible?

Mon code

@api_view(['POST'])
@permission_classes((AllowAny,))
def create_user(request):
    if request.is_ajax():
        if request.method == 'POST':
            serializer = SignupSerializer(data=request.data)
            print 'ser'
            print serializer
            if not serializer.is_valid():
                return Response(serializer.errors,\
                                status=status.HTTP_400_BAD_REQUEST)
            else:
                serializer.save()
                data={'status': 'Created','message': 'Verification email has been sent to your email. Please verify your account.'}
                return Response(data, template_name='register.html')
    else:
        return HttpResponse('hello world')

Lorsque j'appelle l'URL, le code d'état 500 avec l'erreur s'affiche, comme indiqué ci-dessous

TemplateDoesNotExist rest_framework/api.html

quand je vérifie en tant qu'API, j'obtiens une réponse avec 200 statut ok. Cela montre que je suis incapable d'obtenir ma page html

Comment dois-je obtenir mon code HTML en fonction de la demande

Merci d'avance

17
Coeus

Assurez-vous que vous avez rest_framework dans le INSTALLED_APPS de vos paramètres.

48
Linovia

J'ai rencontré ce problème lors de la mise à niveau d'une ancienne version de Django vers Django 2.0. Mon settings.py n'avait pas du tout de directive TEMPLATE, alors j'ai collé ce qui suit dans une nouvelle exécution de Django-admin.py startproject ...:

TEMPLATES = [
    {
        'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'Django.template.context_processors.debug',
                'Django.template.context_processors.request',
                'Django.contrib.auth.context_processors.auth',
                'Django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Ajoutez cela à votre settings.py si vous n'avez pas de directive TEMPLATES dans votre settings.py. Travaillé pour moi.

7
Ross Rogers

Outre l'ajout de 'rest_framework' dans votre INSTALLED_APPS, essayez d'ajouter ce qui suit dans votre TEMPLATES.OPTIONS:

'loaders': [
     'Django.template.loaders.filesystem.Loader',
     'Django.template.loaders.app_directories.Loader'
],
1
Juwaini