2013-05-24 4 views
1

Вот что. Мой urls.py:ViewDoesNotExist, даже если он

urlpatterns = patterns('snippets.views', 
         url(r'^snippets/$', 'snippet_list'), 
         url(r'^snippets/(?P<pk>[0-9]+)/$', 'snippet_detail'), 
         ) 

Мой views.py:

class JSONResponse(HttpResponse): 

    def __init__(self, data, **kwargs): 
     content = JSONRenderer().render(data) 
     kwargs['content_type'] = 'application/json' 
     super(JSONResponse, self).__init__(content, **kwargs) 

    @csrf_exempt 
    def snippet_list(request): 
     if request.method == 'GET': 
      snippets = Snippet.objects.all() 
      serializer = SnippetSerializer(snippets, many=True) 
      return JSONResponse(serializer.data) 

     elif request.method == 'POST': 
      data = JSONParser().parse(request) 
      serializer = SnippetSerializer(data=data) 
      if serializer.is_valid(): 
       serializer.save() 
       return JSONResponse(serializer.data, status=201) 
      else: 
       return JSONResponse(serializer.errors, status=400) 

Я следую this учебник.

У меня есть эта ошибка, когда я на местном/сниппетов /:

ViewDoesNotExist в/сниппеты/Не удалось импортировать snippets.views.snippet_list. Просмотр не существует в модуле snippets.views.

Обновление: ErrorKey У меня после разрешения этого:

KeyError at /snippets/ 
'id' 

Environment: 

Request Method: GET 
Request URL: http://localhost:8000/snippets/ 

Django Version: 1.5.1 
Python Version: 2.7.4 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'snippets') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/home/thomas/.virtualenvs/REST/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/thomas/.virtualenvs/REST/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    77.   return view_func(*args, **kwargs) 
File "/home/thomas/projets/rest/snippets/views.py" in snippet_list 
    21.   serializer = SnippetSerializer(snippets, many=True) 
File "/home/thomas/.virtualenvs/REST/local/lib/python2.7/site-packages/rest_framework/serializers.py" in __init__ 
    159.   self.fields = self.get_fields() 
File "/home/thomas/.virtualenvs/REST/local/lib/python2.7/site-packages/rest_framework/serializers.py" in get_fields 
    206.     new[key] = ret[key] 

Exception Type: KeyError at /snippets/ 
Exception Value: 'id' 

Обновление класса SnippetSerializer:

class SnippetSerializer(serializers.Serializer): 

    class Meta: 
     model = Snippet 
     fields = ('id', 'title', 'code', 'linenos', 'language', 'style') 

    def restore_object(self, attrs, instance=None): 
     """ 
     Create or update a new snippet instance, given a dictionnary 
     or deserialized field values 

     Note that if we don't define this method, then deserializing 
     data will simply return a dictionnary of items. 
     """ 

     if instance: 
      instance.title = attrs.get('title', instance.title) 
      instance.code = attrs.get('code', instance.code) 
      instance.linenos = attrs.get('linenos', instance.linenos) 
      instance.language = attrs.get('language', instance.language) 
      instance.style = attrs.get('style', instance.style) 
      return instance 

     return Snippet(**attrs) 
+0

Что структура файловой системы? –

+0

@PauloBu отступ был ложным, christophe31 разрешил проблему! – Nepho

ответ

8

Измените ваш views.py на:

class JSONResponse(HttpResponse): 

    def __init__(self, data, **kwargs): 
     content = JSONRenderer().render(data) 
     kwargs['content_type'] = 'application/json' 
     super(JSONResponse, self).__init__(content, **kwargs) 

@csrf_exempt 
def snippet_list(request, pk=None): 
    if request.method == 'GET': 
     snippets = Snippet.objects.all() 
     serializer = SnippetSerializer(snippets, many=True) 
     return JSONResponse(serializer.data) 

    elif request.method == 'POST': 
     data = JSONParser().parse(request) 
     serializer = SnippetSerializer(data=data) 
     if serializer.is_valid(): 
      serializer.save() 
      return JSONResponse(serializer.data, status=201) 
     else: 
      return JSONResponse(serializer.errors, status=400) 

Кроме того, вам нужно pk в качестве параметра зрения для того, чтобы нормально работать.

Вам нужно изменить class SnippetSerializer(serializers.Serializer): к class SnippetSerializer(serializers.ModelSerializer):

+0

Я положил pk = None, но у меня все еще есть KeyError. Он говорит «id», только – Nepho

+0

, какая линия - это erro? Можете ли вы обновить вопрос с помощью stacktrace? – karthikr

+0

Я обновил вопрос с помощью stacktrace – Nepho

2

Unindent ваш def snippet_list(request): блок, он будет лучше работает.

Ваш запрос не входит в глобальную область действия модуля. Поэтому его нельзя найти.

+1

Охх ... Большое спасибо. Теперь у меня есть keyerror at/snippets /. Описание ошибки: «id». Любая идея, откуда это могло произойти? – Nepho

Смежные вопросы