TemplateDoesNotExist - Django त्रुटि


117

मैं Django रेस्ट फ्रेमवर्क का उपयोग कर रहा हूं। और मुझे एक त्रुटि मिलती रहती है

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

मैं नहीं जानता कि मैं कैसे गलत हो रहा हूँ। यह पहली बार है जब मैं REST फ्रेमवर्क पर हाथ आजमा रहा हूं। यह कोड है।

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 से विजेट्स को आयात करना rest_framework से आयात धारावाहिकों मॉड्यूल.data.models आयात *

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
क्या आपके पास "rest_framework" आपकी सेटिंग्स में सूचीबद्ध है INSTALLED_APPS?
स्कॉट वुडल

Noobest गलती। इसके लिए धन्यवाद्।
अजगर-कोडर

मुझे एक और संदेह है। मुझे इसमें एक फॉर्म कैसे मिलता है ताकि मैं फॉर्म में कुछ डेटा पोस्ट करूं, उन मूल्यों के साथ डीबी को हिट करें और परिणाम प्राप्त करें? How do I get the form?
अजगर-कोडर

@ScottWoodall कृपया उत्तर पोस्ट करें, और कुछ बिंदु प्राप्त करें!
उदी

जवाबों:


284

सुनिश्चित करें कि आपने rest_frameworkअपने में सूचीबद्ध किया है settings.py INSTALLED_APPS


DRF की निर्भरता दर्ज न करने के परिणामस्वरूप भी हो सकता है। मेरे मामले में मुझे जोड़ना 'django_hstore',था INSTALLED_APPS
शाकर

5

मेरे लिए, rest_framework/api.htmlवास्तव में एक भ्रष्ट इंस्टॉलेशन या किसी अन्य अज्ञात कारण के कारण फाइल सिस्टम पर गायब था। फिर से स्थापित करने djangorestframeworkसमस्या तय:

$ pip install --upgrade djangorestframework

1
वही चीज़ मेरे साथ हुई। ध्यान दें कि कमांड शायद असंगत संस्करण में अपग्रेड होगा (भले ही आपका सेटअप एरो और / या आवश्यकताएँ। अन्यथा यह कहता है)। आप पाइप की स्थापना रद्द करने / स्थापित करने या सटीक संस्करण निर्दिष्ट करने का प्रयास कर सकते हैं।
जॉर्ज वर्गास

5

कृपया ध्यान दें कि DRF उसी प्रारूप में डेटा वापस करने का प्रयास करता है जो अनुरोध किया गया था। आपके ब्राउज़र से, यह सबसे अधिक संभावना है HTML। वैकल्पिक प्रतिक्रिया निर्दिष्ट करने के लिए, ?format=पैरामीटर का उपयोग करें । उदाहरण के लिए:?format=json :।

TemplateDoesNotExistत्रुटि आमतौर पर तब होता है जब आप अपने ब्राउज़र में एक API endpoint दौरा कर रहे हैं और आप ऐसा करेंगे नहीं है rest_frameworkके रूप में अन्य उत्तरदाताओं द्वारा वर्णित, इंस्टॉल किए गए एप्लिकेशन की अपनी सूची में शामिल थे।

यदि आपके पास अपनी ऐप्स की सूची में DRF शामिल नहीं है, लेकिन HTML व्यवस्थापक DRF पृष्ठ का उपयोग नहीं करना चाहते हैं, तो इस त्रुटि संदेश को 'साइड-स्टेप' के लिए एक वैकल्पिक प्रारूप का उपयोग करने का प्रयास करें।

डॉक्स से अधिक जानकारी यहाँ: http://www.django-rest-framework.org/topics/browsable-api/#stats


4

आपका मामला नहीं है, लेकिन यह भी संभव कारण के लिए अनुकूलित loadersहै Django। उदाहरण के लिए, यदि आपके पास सेटिंग्स (तब से 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',
        ],
        ...
    }
}]

क्योंकि आप स्पष्ट रूप से जोड़ना चाहिए Django, टेम्पलेट्स के साथ अनुप्रयोगों फ़ोल्डरों को देखने के लिए कोशिश नहीं करेंगे django.template.loaders.app_directories.Loaderमें loadersउस के लिए।

ध्यान दें, कि डिफ़ॉल्ट रूप से django.template.loaders.app_directories.Loaderशामिल है loaders


चेतावनी:?: (1_8.W001) स्टैंडअलोन TEMPLATE_ * सेटिंग्स को Django 1.8 में चित्रित किया गया था और TEMPLATES शब्दकोश पूर्ववर्ती लेता है। आपको निम्न सेटिंग्स के मानों को अपने डिफ़ॉल्ट टेंपलेट में निर्धारित करना होगा: TEMPLATE_DEBUG।
औरलाब

0

मैं उसी त्रुटि संदेश में भाग गया। मेरे मामले में, यह Jinja2 के बैकएंड को सेट करने के कारण था। मेरी सेटिंग फ़ाइल में:

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

इसे वापस डिफ़ॉल्ट में बदलने से समस्या ठीक हो गई:

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

अभी भी यकीन नहीं है कि rest_framework के साथ Jinja2 बैकेंड का उपयोग करने का एक तरीका है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.