Django: TemplateDoesNotExist (rest_Framework/api.html)

在我的视图函数中,我想返回一个 json 对象(data1)和一些 text/html (表单)?

我的原则

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

当我调用 url 时,我得到状态码500,错误如下所示

TemplateDoesNotExist rest _ Framework/api.html

当我检查作为一个 API,我得到200 OK 状态的响应。这表明进出口无法得到我的 HTML 页面

如何根据请求获取 html

先谢谢你

67445 次浏览

请确保您的 rest_framework在您的设置的 INSTALLED_APPS

除了在你的 INSTALLED_APPS中添加 'rest_framework',尝试在你的 TEMPLATES.OPTIONS中添加以下内容:

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

我在从旧的 Django 版本升级到 Django 2.0时遇到了这个问题。我的 settings.py根本没有 TEMPLATE指令,所以我从一个新的 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',
],
},
},
]

如果你的 settings.py中没有 TEMPLATES指令,那就把它加到你的 settings.py中。

确保安装了 pip install djangorestframework并在 seting.py 中包含 rest _ Framework

INSTALLED_APPS = [
'rest_framework',
]

我遇到了同样的问题,我发送了一个空白的回应。在 create_user函数中尝试将不同的信息放入 Response()中,以检查它是否完全有效

在视图上添加这个装饰器 @ renderer _ classes ([ JSONRenderer ])

这是我试图解释的问题,并收集其他每个人的反应到一个单一的名单。感谢大家给我的肩膀上站!

我相信这是因为 Django REST 框架想要呈现一个模板(rest_framework/api.html) ,但是找不到该模板。似乎有两种方法可以解决这个问题:

方法1: 使模板工作

确保在 settings.pyINSTALLED_APPS中包含 REST 框架:

INSTALLED_APPS = [
...
'rest_framework',
...
]

并确保 APP_DIRS在模板配置中为 True(如果未指定,则默认为 False)。这允许 Django 在已安装的应用程序中查找模板。这里有一个似乎可以工作的最小配置,不过您可能需要在这里进行更多的配置:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'APP_DIRS': True,
},
]

方法2: 返回一个 JSON 响应

如果您告诉 REST Framework 呈现一个 JSON 响应,那么它就不需要使用模板,所以您不需要像上面提到的那样更改 APP_DIRS设置。似乎您甚至不需要在 INSTALLED_APPS中列出 rest _ Framework,尽管出于其他原因可能有必要将其放在那里。

您可以在 setings.py 中全局执行此操作:

REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
]
}

或者,如果你使用的是 @api_view装饰器,那么你可以在每个视图上指定 JSONRenderer:

@api_view(['GET'])
@renderer_classes([JSONRenderer])
def some_view(request):
return Response({'status': 'yay'})

详情请参阅 RESTFramework 呈现程序文档

我遇到过同样的问题,发现 rest _ Framework 没有添加到 setings.py 中安装的应用程序中。添加它解决了我的问题。

我也有同样的问题。 确保在“已安装的应用程序”中的设置中安装了 rest _ Framework

不要使用 HttpResponse,而是使用:

from rest_framework.response import Response


return Response(data=message, status=status.HTTP_200_OK)

确保在 installed_apps中将 rest_framework添加到 settings.py文件:

INSTALLED_APPS = [
'rest_framework',
]

安装应用程序的顺序很重要。在我的例子中,我在‘ rest _ Framework’上面添加了‘ rest _ auth’,所以它给出了这个错误,但是当我重新排序它时(‘ rest _ Framework’在‘ rest _ auth’上面,‘ rest _ auth。注册,休息 _ 框架。等) ,此错误已清除。

下列正确订单:

已安装的应用程序 = [

...
'rest_framework',
'rest_auth',
'rest_auth.registration',
'rest_framework.authtoken',
...

]

谢谢。

尝试下面的方法肯定会对你有所帮助:

1: 向 setings.py 应用程序列表添加 rest _ Framework,可能是因为您的应用程序的列表顺序。 '''

INSTALLED_APPS = [
'rest_framework',
...
]

检查模板设置。参见后端,DIR 和 APP _ DIRS。如果您已经定制了 rest-Framework 模板,请检查您定义的路径是否正确,使 APP _ DIRS: True。在大多数情况下,这将解决。 '''

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR, os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
....
}
]

3: 检查默认的渲染器类设置: '''

REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
...
]
}

4: 如果您在基于函数的视图上使用 api _ view 装饰器,请确保您已经正确地提供了渲染器。

@ renderer _ classes ([ JSONRenderer ]) '''