Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django中存在json的内部服务器错误_Django_Json_Django Views - Fatal编程技术网

django中存在json的内部服务器错误

django中存在json的内部服务器错误,django,json,django-views,Django,Json,Django Views,我有一个表单,通过AJAX提交并上传文件。但是,尽管文件已正确上载,但javascript在上载后显示内部服务器错误。我知道该文件已添加到数据库并上载到服务器;除此错误消息外,一切似乎都正常工作。Django日志中似乎没有错误消息 我也没有编写处理javascript的代码,所以实际上可能有更好的方法来实现这一点,或者我忽略了一些明显的东西 错误似乎是因为这一行: response = JSONResponse(data, {}, response_mimetype(self.request))

我有一个表单,通过AJAX提交并上传文件。但是,尽管文件已正确上载,但javascript在上载后显示
内部服务器错误。我知道该文件已添加到数据库并上载到服务器;除此错误消息外,一切似乎都正常工作。Django日志中似乎没有错误消息

我也没有编写处理javascript的代码,所以实际上可能有更好的方法来实现这一点,或者我忽略了一些明显的东西

错误似乎是因为这一行:

response = JSONResponse(data, {}, response_mimetype(self.request))
在my views.py中:

def response_mimetype(request):
    if "application/json" in request.META['HTTP_ACCEPT']:
        return "application/json"
    else:
        return "text/plain"

class UploadedFileCreateView(CreateView):
    model = UploadedFile
    form_class = UploadedFileForm

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.project_id = self.kwargs['proj_key']
        self.object.save()
        f = self.request.FILES.get('file')

        data = [{
            'name': self.object.name(),
            'url': "/uploads/xmlfiles/" + self.object.name().replace(" ", "_"),
            'delete_url': reverse('fileupload:upload-delete',
                kwargs={'pk':self.object.id,
                'proj_key':self.kwargs['proj_key']}),
            'delete_type': "DELETE"}]


        # the problem line
        response = JSONResponse(data, {}, response_mimetype(self.request)) 
        response['Content-Disposition'] = 'inline; filename=files.json'
        return super(UploadedFileCreateView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(UploadedFileCreateView, self).get_context_data(**kwargs)
        context['files'] = UploadedFile.objects.all()
        context['proj'] = int(self.kwargs["proj_key"])
        return context

class JSONResponse(HttpResponse):
    """JSON response class."""
    def __init__(self,obj='',json_opts={},mimetype="application/json",*args,**kwargs):
        content = simplejson.dumps(obj,**json_opts)
        super(JSONResponse,self).__init__(content,mimetype,*args,**kwargs)
我原以为问题可能出在
reverse
方法上,但那里一切正常。以防万一,下面是URL.py中的一行:

(r'^projects/(?P<proj_key>\d+)/d/(?P<pk>\d+)$', UploadedFileDeleteView.as_view(), {}, 'upload-delete'),
编辑:刚刚注意到控制台中的500错误,但我不确定在哪里可以找到堆栈跟踪(因为我没有看到错误模板):


您需要将
JSONResponse
类的定义移动到
UploadedFileCreateView
类之前;该错误发生在调用尚未定义的类之前

之所以保存该对象,是因为在调用
jsonresponse
类之前已经保存了该对象:

def form_valid(self, form):
    self.object = form.save(commit=False)
    self.object.project_id = self.kwargs['proj_key']
    self.object.save() # object gets saved successfully here
    f = self.request.FILES.get('file')

    # ...


    # Here, JSONResponse is not defined yet, so this is resulting in a 500
    # since you have debug=False, its resulting in the default 500 error template
    # from your server.
    response = JSONResponse(data, {}, response_mimetype(self.request)) 

如果你应该在某个地方看到stacktrace,你能发布它吗?我没有收到500错误,至少我看不到任何地方(日志文件、控制台)。不,这不是问题-我仍然有同样的问题。为什么每个人都认为这是一个500的错误?我没有看到任何具体的错误消息,也不知道如何看到(内部服务器错误是javascript的输出,而不是django)。另外值得注意的是,该文件实际上已上载到服务器。事实上,你是对的-有一个500错误,但我不知道如何查看stacktrace,因为我没有看到它的模板。我将控制台日志行添加到我的OP中。
[29/Oct/2013 23:38:56] "POST /upload/projects/1/ HTTP/1.1" 500 11939
def form_valid(self, form):
    self.object = form.save(commit=False)
    self.object.project_id = self.kwargs['proj_key']
    self.object.save() # object gets saved successfully here
    f = self.request.FILES.get('file')

    # ...


    # Here, JSONResponse is not defined yet, so this is resulting in a 500
    # since you have debug=False, its resulting in the default 500 error template
    # from your server.
    response = JSONResponse(data, {}, response_mimetype(self.request))