Python 为什么此Django API调用出现意外的关键字参数错误?

Python 为什么此Django API调用出现意外的关键字参数错误?,python,django,django-rest-framework,typeerror,keyword-argument,Python,Django,Django Rest Framework,Typeerror,Keyword Argument,我正在学习Django Restful教程,并编写了以下代码 在views.py中: from snippets.models import Snippet from snippets.serializers import SnippetSerializer from rest_framework import status

我正在学习Django Restful教程,并编写了以下代码

在views.py中:

from snippets.models import Snippet                                              
from snippets.serializers import SnippetSerializer                               

from rest_framework import status                                                
from rest_framework.decorators import api_view                                   
from rest_framework.response import Response                                     

@api_view(['GET','POST'])                                                        
def snippet_list(request, format=None):                                          
    """                                                                          
    List all snippets, or create a new snippet.                                  
    """                                                                          
    if request.method == 'GET':                                                  
        snippets = Snippet.objects.all()                                         
        serializer = SnippetSerializer(snippets, many=True)                      
        return Response(serializer.data)                                         
    elif request.method == 'POST':                                               
        serializer = SnippetSerializer(data=request.data)                        
        if serializer.is_valid():                                                
            serializer.save()                                                    
            return Response(serializer.data,status=status.HTTP_201_CREATED)      
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
在URL.py中:

from django.conf.urls import url
from snippets import views
from rest_framework.urlpatterns import format_suffix_patterns

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

urlpatterns = format_suffix_patterns(urlpatterns)
我得到一个错误,该错误会产生此回溯:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/snippets.json

Django Version: 1.9.7
Python Version: 2.7.6
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'rest_framework',
 'snippets',
 'quickstart']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/home/myname/workspace/restTutorial/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "/home/myname/workspace/restTutorial/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/myname/workspace/restTutorial/env/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)

Exception Type: TypeError at /snippets.json
Exception Value: snippet_list() got an unexpected keyword argument 'format'
为什么我会犯这个错误


编辑:链接到

问题是我在
views.py
文件中有重复的函数,在底部附近有不同的装饰器。删除它们解决了问题。

试试这个

http http://127.0.0.1:8000/snippets.json  # JSON suffix http
http://127.0.0.1:8000/snippets.api   # Browsable API suffix
反而

http http://127.0.0.1:8000/snippets/?format=json  
http http://127.0.0.1:8000/snippets/?format=api

我遇到了一个类似的问题我的错误是我在声明URL时使用了Django的反向模块,而不是Django Rest Framework的反向模块:

请勿使用此选项:

from django.urls import reverse
改用这个:

from rest_framework.reverse import reverse


你能发布你的设置吗?这是pastebin:@user1362215上文件的副本。发布设置时,你需要隐藏你的密钥。然后用该链接更新问题。完成。不过,这只是一个教程,所以安全性不是一个大问题。请发布完整的堆栈跟踪,而不仅仅是最后一行。
from rest_framework.reverse import reverse
@api_view(['GET'])
def api_root(request, format=None):
    return Response({
       #'users': reverse('users:user-list', request=request, format=format),
       'transactions': reverse('transactions:transaction-list', request=request, format=format),
})