TemplateDoesNotExist - Django Hatası


117

Django Rest Framework kullanıyorum. ve sürekli bir hata alıyorum

Exception Type: TemplateDoesNotExist
Exception Value: rest_framework/api.html

Nasıl yanlış gittiğimi bilmiyorum. İlk kez REST Framework üzerinde uygulamalı olarak çalışıyorum. Bu koddur.

views.py

import socket, json
from modules.data.models import *
from modules.utils import *
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from modules.actions.serializers import ActionSerializer


@api_view(['POST'])
@check_field_exists_wrapper("installation")
def api_actions(request, format = None):

    action_type = request.POST['action_type']
    if action_type == "Shutdown" : 
        send_message = '1'
        print "Shutting Down the system..."
    elif action_type == "Enable" : 
        send_message = '1'
        print "Enabling the system..."
    elif action_type == "Disable" : 
        send_message = '1'
        print "Disabling the system..."
    elif action_type == "Restart" : 
        send_message = '1'
        print "Restarting the system..."

    if action_type in ["Shutdown", "Enable", "Disable"] : PORT = 6000
    else : PORT = 6100

    controllers_list = Controller.objects.filter(installation_id = kwargs['installation_id'])

    for controller_obj in controllers_list:
        ip = controller_obj.ip
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((ip, PORT))
            s.send(send_message)
            s.close()
        except Exception as e:
            print("Exception when sending " + action_type +" command: "+str(e))

    return Response(status = status.HTTP_200_OK)

models.py

class Controller(models.Model):
    id = models.IntegerField(primary_key = True)
    name = models.CharField(max_length = 255, unique = True)
    ip = models.CharField(max_length = 255, unique = True)
    installation_id = models.ForeignKey('Installation')

serializers.py

django.forms'dan rest_framework'dan widget'ları içe aktarın modüller.data.models'ten içe aktarma serileştiricileri içe aktar *

class ActionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Controller
        fields = ('id', 'name', 'ip', 'installation_id')

urls.py

from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns

urlpatterns = patterns('modules.actions.views',
    url(r'^$','api_actions',name='api_actions'),
)

34
Settings.py INSTALLED_APPS'nizde listelenen "rest_framework" var mı?
Scott Woodall

Hiç bir hata. Bunun için teşekkürler.
python-coder

Başka bir şüphem var. Formda bazı verileri göndermek, DB'ye bu değerlerle vurmak ve sonucu almak için bunda nasıl bir form alabilirim? How do I get the form?
python-coder

@ScottWoodall, lütfen cevabı gönderin ve birkaç puan kazanın!
Udi

Yanıtlar:


284

rest_frameworkListenizde yer aldığınızdan emin olun settings.py INSTALLED_APPS.


DRF bağımlılığının kaydedilmemesinden de kaynaklanabilir. Benim durumumda ben eklemek zorunda 'django_hstore',için INSTALLED_APPS.
shacker

5

Benim için, rest_framework/api.htmlbozuk bir kurulum veya başka bir bilinmeyen nedenden dolayı dosya sisteminde aslında eksikti. Yeniden djangorestframeworkyükleme sorunu çözdü:

$ pip install --upgrade djangorestframework

1
Bana da aynı şey oldu. Komutun belki uyumsuz bir sürüme yükseltileceğini unutmayın (setup.py ve / veya requirements.txt dosyanız aksini söylese bile). Pip uninstall / install deneyebilir veya tam sürümü belirtebilirsiniz.
Jorge Vargas

5

Lütfen DRF'nin verileri istenen formatta döndürmeye çalıştığını unutmayın. Tarayıcınızdan bu büyük olasılıkla HTML'dir. Alternatif bir yanıt belirtmek için ?format=parametreyi kullanın . Örneğin: ?format=json.

TemplateDoesNotExistTarayıcınızda bir API son nokta ziyaret hata genellikle oluşur ve siz do not var rest_frameworkdiğer katılımcıların açıklandığı gibi yüklü uygulamalar listenize dahil.

Uygulama listenize DRF eklenmemişse, ancak HTML Yönetici DRF sayfasını kullanmak istemiyorsanız, bu hata mesajını 'yan adım' olarak kullanmak için alternatif bir biçim kullanmayı deneyin.

Buradaki belgelerden daha fazla bilgi: http://www.django-rest-framework.org/topics/browsable-api/#formats


4

Değil durum, aynı zamanda olası bir nedeni özelleştirilmiştir loadersiçin Django. Örneğin, ayarlarınız varsa (şu tarihten itibaren Django 1.8):

TEMPLATES = [
{
    ...
    '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'
        ],
        'loaders': [
            'django.template.loaders.filesystem.Loader',
        ],
        ...
    }
}]

Açıkça eklemek gerekir, çünkü Django, şablonlarla uygulamaları klasörlere bakmak denemez django.template.loaders.app_directories.Loaderiçine loadersbunun için.

Dikkat edin, bunun varsayılan olarak django.template.loaders.app_directories.Loaderiçine dahildir loaders.


UYARILAR:?: (1_8.W001) Bağımsız TEMPLATE_ * ayarları Django 1.8'de kullanımdan kaldırıldı ve ŞABLONLAR sözlüğü öncelikli. Aşağıdaki ayarların değerlerini varsayılan ŞABLONLAR diktenize koymalısınız: TEMPLATE_DEBUG.
andilabs

0

Aynı hata mesajıyla karşılaştım. Benim durumumda, arka ucu Jinja2'ye ayarlamaktan kaynaklanıyordu. Ayarlar dosyamda:

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.jinja2.Jinja2',
...

Bunu varsayılana geri döndürmek sorunu çözdü:

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
...

Rest_framework ile Jinja2 arka ucunu kullanmanın bir yolu olup olmadığından hala emin değilim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.