模板不存在于/app/api/g

2024-04-19 11:22:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想制作一个以json格式显示模型内容的页面。 现在我有个错误, 模板不在/app/api/get处列出 rest_框架/api.html文件. 模型.py是

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

在序列化程序.py是

^{pr2}$

在网址.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')
]

在视图.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文件任何地方。还有我没有注册弗雷斯特的目录_框架。所以,我真的不明白为什么这个错误发生了。怎么了我能修好这个吗?在

回溯是

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

Tags: djangofrompyimportselfrestgetmodels
1条回答
网友
1楼 · 发布于 2024-04-19 11:22:08

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

# 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-geturl模式regex,如下所示:

^{pr2}$

由于您想要显示所有的Color,使用来自DRF标准库的^{}可能是一个更好的方法:

from rest_framework import generics

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

如您所见,不需要实现get方法,因为这是一个标准的GET请求,您只需指定将序列化此集合的queryset和{}。DRF关心其他人。在

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

相关问题 更多 >