2017-09-02 15 views
0

モデルのコンテンツをjson形式で表示するページを作りたいと思います。 エラーが発生しました。 TemplateDoesNotExist at/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は、私はAPIを書いていない

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) 

であるであるです.htmlどこでも。そして私は登録しなかったfrest_frameworkのディレクトリです。なぜこのエラーが発生するのか理解できません。どうすれば修正できますか?

トレースバックがrest_frameworksettings.pyであなたのINSTALLED_APPSリストに表示されていることを確認し

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

次のとおりです。まず

# 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秒を表示したいと、おそらくDRFの標準ライブラリからListAPIViewを使用するより良いaproachです:

from rest_framework import generics 

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

見ての通り、実施の必要はありませんこれは標準のGETリクエストであり、このコレクションをシリアライズするquerysetserializer_classを指定するだけでよいので、getメソッドです。 残りはDRFをお持ちください。

この方法では、データベースのすべてのColorエントリがJSON形式でシリアル化されます。

+0

thx ur comments.Uのコードを書きましたが、同じエラーが発生しました。私の質問でTracebackが更新されました。 – user8504021

+0

@ user8504021 'rest_framework'があなたの' INSTALLED_APPS'リストにあることを確認してください。 – wencakisa

+0

@ user8504021私はちょうどより詳細な解決策で自分の答えを更新しました。 – wencakisa

関連する問題