2017-09-02 118 views
0

我想制作一个以json格式显示模型内容的页面。 现在我得到了一个错误, TemplateDoesNotExist在/ app/api/get rest_framework/api.html。 models.py是TemplateDoesNotExist at/app/api/get

from django.db import models 

# Create your models here. 
class Color(models.Model): 
    name = models.CharField(max_length=255) 
    background_color = models.CharField(max_length=255) 
    h1_color = models.CharField(max_length=255) 
    p_color = models.CharField(max_length=255) 

    def __str__(self): 
     return self.name 

serializers.py是

from .models import Color 
from rest_framework import serializers 


class TaskSerializer(serializers.Serializer): 
    task_name = serializers.CharField(max_length=100,source='name') 

    class Meta: 
     model = Color 
     fields = ('name', 
        'background_color', 
        'h1_color', 
        'p_color', 
        'task_name') 

urls.py是

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'api/get',views.TaskGet.as_view(),name='task-get') 
] 

views.py是

from django.shortcuts import render 
from .models import Color 
from .forms import ColorForm 
from .serializers import TaskSerializer 
from rest_framework.views import APIView 
from rest_framework.response import Response 

from rest_framework import status 

# Create your views here. 
def index(request): 
    d = { 
     'colors': Color.objects.all(), 
     'form': ColorForm(), 
    } 
    return render(request, 'index.html', d) 

class TaskGet(APIView): 
    def get(self, request, format=None): 
     obj = Color.objects.all() 
     serializers = TaskSerializer(obj, many=True) 

     return Response(serializers.data, status.HTTP_200_OK) 

没写API .html任何地方。而我没有注册frest_framework的目录。所以,我真的不明白为什么会出现这个错误。我该如何解决这个问题?

回溯是

Traceback: 

File "/Users/XXX/anaconda/envs/py36/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner 
    41.    response = get_response(request) 

File "/Users/XXX/anaconda/envs/py36/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response 
    217.     response = self.process_exception_by_middleware(e, request) 

File "/Users/XXX/anaconda/envs/py36/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response 
    215.     response = response.render() 

File "/Users/XXX/anaconda/envs/py36/lib/python3.6/site-packages/django/template/response.py" in render 
    107.    self.content = self.rendered_content 

File "/Users/XXX/anaconda/envs/py36/lib/python3.6/site-packages/rest_framework/response.py" in rendered_content 
    72.   ret = renderer.render(self.data, accepted_media_type, context) 

File "/Users/XXX/anaconda/envs/py36/lib/python3.6/site-packages/rest_framework/renderers.py" in render 
    705.   template = loader.get_template(self.template) 

File "/Users/XXX/anaconda/envs/py36/lib/python3.6/site-packages/django/template/loader.py" in get_template 
    25.  raise TemplateDoesNotExist(template_name, chain=chain) 

Exception Type: TemplateDoesNotExist at /app/api/get/ 
Exception Value: rest_framework/api.html 
+0

包含您在控制台上看到的完整错误。 –

回答

1

确保rest_framework在您INSTALLED_APPS列表中列出的settings.py

# Application definition 

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 

    'rest_framework' # <<< 
] 

首先,改变你的task-get URL模式正则表达式,如:

from django.conf.urls import url 

from . import views 

urlpatterns = [ 
    # ... 
    url(r'^api/get/$', views.TaskGet.as_view(), name='task-get') 
    # ____^________^___________________ 
    # Put "begin" and "end" of the url. 
] 

至于要显示所有Color S,它可能是一个更好的形式给出了使用ListAPIViewDRF标准库:

from rest_framework import generics 

class TaskGet(generics.ListAPIView): 
    serializer_class = TaskSerializer 
    queryset = Color.objects.all() 

正如你看到的,也没有必要实现的get方法,因为这是一个标准的GET请求,您只需指定将序列化该集合的querysetserializer_classDRF关心其余的。

此方法将列出数据库中所有Color条目,以JSON格式序列化。

+0

thx你的意见。我写了你的代码,但同样的错误happen.I更新Traceback在我的问题,所以如果你知道的东西,请帮助我。 – user8504021

+0

@ user8504021请确保'rest_framework'位于您的'INSTALLED_APPS'列表中。 – wencakisa

+0

@ user8504021我刚刚更新了我的答案和更详细的解决方案。 – wencakisa