Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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
Python Django Ajax POST请求:内部服务器错误_Python_Jquery_Ajax_Django_Django Views - Fatal编程技术网

Python Django Ajax POST请求:内部服务器错误

Python Django Ajax POST请求:内部服务器错误,python,jquery,ajax,django,django-views,Python,Jquery,Ajax,Django,Django Views,请注意,自从我最近开始工作以来,我一直是AJAX领域的大人物。 我正在使用Django 2.0和Python。 我试图以数组的形式返回不兼容选项的列表 这是我的型号: class Door(models.Model) : image = models.ImageField(upload_to=upload_location) color = models.ForeignKey(Color, on_delete=models.CASCADE) price = models.

请注意,自从我最近开始工作以来,我一直是AJAX领域的大人物。
我正在使用Django 2.0和Python。
我试图以数组的形式返回不兼容选项的列表

这是我的型号:

class Door(models.Model) :
    image = models.ImageField(upload_to=upload_location)
    color = models.ForeignKey(Color, on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=10, decimal_places=2, default='119.99')
    not_comp_options = models.ManyToManyField(Option)
$.ajax({
    type: "POST",
    url: "/get_not_compat_options/" + door_id,
    data: "",
    dataType: 'json',
    success: function()
    {
        console.log(data.onct)
    } 
})
urlpatterns = [
    # Other url patterns
    path('get_not_compat_options', views.get_not_compat_options, name="get_not_compat_options")
]
def get_not_compat_options(request, door_id) :
    onct = []
    door = get_object_or_404(Door, id=door_id)
    not_compat_options = door.not_comp_options
    for option in not_comp_options.all() :
        onct.append(option.name)
    data.append({"onct": onct})
    return JsonResponse(data)
这是我的js模板:

class Door(models.Model) :
    image = models.ImageField(upload_to=upload_location)
    color = models.ForeignKey(Color, on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=10, decimal_places=2, default='119.99')
    not_comp_options = models.ManyToManyField(Option)
$.ajax({
    type: "POST",
    url: "/get_not_compat_options/" + door_id,
    data: "",
    dataType: 'json',
    success: function()
    {
        console.log(data.onct)
    } 
})
urlpatterns = [
    # Other url patterns
    path('get_not_compat_options', views.get_not_compat_options, name="get_not_compat_options")
]
def get_not_compat_options(request, door_id) :
    onct = []
    door = get_object_or_404(Door, id=door_id)
    not_compat_options = door.not_comp_options
    for option in not_comp_options.all() :
        onct.append(option.name)
    data.append({"onct": onct})
    return JsonResponse(data)
这是我的URL:

class Door(models.Model) :
    image = models.ImageField(upload_to=upload_location)
    color = models.ForeignKey(Color, on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=10, decimal_places=2, default='119.99')
    not_comp_options = models.ManyToManyField(Option)
$.ajax({
    type: "POST",
    url: "/get_not_compat_options/" + door_id,
    data: "",
    dataType: 'json',
    success: function()
    {
        console.log(data.onct)
    } 
})
urlpatterns = [
    # Other url patterns
    path('get_not_compat_options', views.get_not_compat_options, name="get_not_compat_options")
]
def get_not_compat_options(request, door_id) :
    onct = []
    door = get_object_or_404(Door, id=door_id)
    not_compat_options = door.not_comp_options
    for option in not_comp_options.all() :
        onct.append(option.name)
    data.append({"onct": onct})
    return JsonResponse(data)
以下是我的观点:

class Door(models.Model) :
    image = models.ImageField(upload_to=upload_location)
    color = models.ForeignKey(Color, on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=10, decimal_places=2, default='119.99')
    not_comp_options = models.ManyToManyField(Option)
$.ajax({
    type: "POST",
    url: "/get_not_compat_options/" + door_id,
    data: "",
    dataType: 'json',
    success: function()
    {
        console.log(data.onct)
    } 
})
urlpatterns = [
    # Other url patterns
    path('get_not_compat_options', views.get_not_compat_options, name="get_not_compat_options")
]
def get_not_compat_options(request, door_id) :
    onct = []
    door = get_object_or_404(Door, id=door_id)
    not_compat_options = door.not_comp_options
    for option in not_comp_options.all() :
        onct.append(option.name)
    data.append({"onct": onct})
    return JsonResponse(data)
不幸的是,在浏览器控制台中,我收到了一个错误提示:
500(内部服务器错误)


PS:如果这有帮助的话,我正在为我的服务器使用Nginx和gunicorn。

您正在调用
data.append()
,而没有先定义数据

也许你也想要

data = [{"onct": onct}]


这里有一些奇怪的事情:

  • 您发出POST请求,但视图没有副作用,POST也不会传输任何数据。在这种情况下,GET更有意义
  • 根据
    success
    句柄,结果应该是一个带有键的字典
    onct
    ;及
  • url.py
    中的url不包含
    door\u id
    参数
  • 通过在查询中使用
    .values\u list(..)
    ,我们还可以节省一点数据库带宽,并进一步使视图更加优雅:

    def get_not_compat_options(request, door_id):
        door = get_object_or_404(Door, id=door_id)
        not_compat_options = door.not_comp_options
        data = {'onct': list(not_comp_options.all().values_list('name', flat=True))}
        return JsonResponse(data)

    否则,这个
    路径(…)
    就不能接受
    门id

    你能发布你的错误日志吗,这样我们就可以更好地了解出了什么问题?你应该查看Python服务器的日志来进行回溯。我得到
    jquery-3.2.1.min.js:4 posthttp://178.128.42.122/shop/get_not_compat_options/14 500(内部服务器错误)
    我在哪里看到您需要在浏览器的开发工具中查找服务器发送的完整错误。另外,在
    非兼容选项
    非兼容选项
    之间切换。csrf令牌丢失据我所知,没有其他字典:只有一个,另一个是
    。name
    s,这似乎表明se是字符串。@Wariored我不认为CSRF是这里的问题-我希望看到的是状态代码403,而不是500。@WillemVanOnsem我之前误读了循环,我改变了我的建议。