【问题标题】:Django NameError - Name 's' is not definedDjango NameError - 名称's'未定义
【发布时间】:2018-07-14 12:45:53
【问题描述】:

业余开发者, 我有以下代码在 Python 2.7、Django 1.10 中运行良好。但是现在当我升级到 Django 2+ 和 Python 3+ 时,它给出了一个错误。

查看代码:

def get_class_name(request):
    class_name = ClassName.objects.get(pk = request.GET.get('class_name', None))
    classes = Class.objects.filter(class_name = class_name)
    l = [[", ".join([s.subject for s in x.subject.all()]),s.id] for x in classes]

错误信息: /ajax/get_class_name/ 处的名称错误 名称“s”未定义 请求方法:GET 请求网址:http://localhost:8000/ajax/get_class_name/?class_name=1 Django 版本:2.0 异常类型:名称错误 异常值:
名称“s”未定义

型号: 类类(模型。模型): 主题 = 模型.ManyToManyField(主题)

我该如何解决?

【问题讨论】:

  • 问题出在这一行:"l = [[", ".join ([s.subject for s in x.subject.all ()]), s.id] for x in classes]”,因为当您尝试构建第二个列表时,您在上下文之外使用变量“s”,因为“s”仅存在于第二个列表的创建中。你想在这条线上做什么?

标签: python ajax django list view


【解决方案1】:
def get_class_name(request, pk):
    pk = request.GET.get('class_name', None)
    class_name = ClassName.objects.get(pk = pk)
    classes = Class.objects.filter(class_name = class_name)
    l = [[", ".join([s.subject for s in x.subject.all()]),s.id] for x in classes]

【讨论】:

  • 你在参数中传递了pk吗?
【解决方案2】:
def get_class_name(request):
    class_name = ClassName.objects.get(pk = request.GET.get('class_name', None))
    classes = Class.objects.filter(class_name = class_name)
    l = [[", ".join([s.subject for s in x.subject.all()]),x.id] for x in classes]

我认为问题出在,s.id] for x s 超出了第一个列表理解范围,您的意思可能是,x.id] for x in classes] 吗?

【讨论】:

  • 是的,正如你所说,错误发生在 s.id 上,我现在认识到了。希望我能尽快把它弄出来。
猜你喜欢
  • 2022-10-16
  • 2017-12-25
  • 2021-07-17
  • 2012-05-13
  • 2017-08-17
  • 2020-02-24
  • 2021-04-14
  • 2020-08-17
  • 2021-03-09
相关资源
最近更新 更多