2016-07-14 79 views
8

Nella mia funzione di visualizzazione, mi piacerebbe restituire un oggetto json (data1) e alcuni text/html (modulo). È possibile?Django: TemplateDoesNotExist (rest_framework/api.html)

mio codice

@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') 

Quando chiamo l'URL ottengo il codice di stato 500 con l'errore come mostrato qui sotto

TemplateDoesNotExist rest_framework/API.html

quando controllo come una API, ottengo una risposta con 200 ok status. Questo dimostra Im in grado di ottenere la mia pagina html

Come devo avere il mio html a seconda della richiesta

Grazie in anticipo

risposta

16

Accertarsi che siano presenti rest_framework in di INSTALLED_APPS

+0

È già presente. Credo che @api_view non mi consenta di visualizzare la pagina html. Ci sono altre soluzioni – Coeus

+0

Si desidera ricontrollare ciò aprendo la shell di django e guardando INSTALLED_APPS. È improbabile api_view da quando ho funzionato e restituisce un tipo di supporto HTTP non supportato 415. – Linovia

+0

questa funzione funziona con comando CURL, ottengo anche una risposta, quando provo a renderizzare html con il mio browser, ottengo l'errore sopra elencato – Coeus

0

altro che aggiungere 'rest_framework' le impostazioni all'interno del tuo INSTALLED_APPS, prova ad aggiungere quanto segue all'interno del tuo TEMPLATES.OPTIONS:

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

Ho riscontrato questo problema durante l'aggiornamento da una vecchia versione di Django a Django 2.0. Il mio settings.py non ha avuto una direttiva TEMPLATE a tutti, così ho portato a casa il seguente da un nuovo django-admin.py startproject ... corsa:

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', 
      ], 
     }, 
    }, 
] 

Aggiungere che alla tua settings.py se non si dispone di TEMPLATES direttiva nel vostro settings.py. Ha funzionato per me