【问题标题】:I need to know what this line of code does in django我需要知道这行代码在 django 中做了什么
【发布时间】:2016-09-24 06:23:38
【问题描述】:

我得到了这个 django 项目。我一直在尝试运行它并弄清楚它。我有一个看法:

@csrf_exempt
def view(Request,viewName,id):
    print '-------------------start    ' + str(datetime.datetime.now())
    try:
        c = globals()[viewName](viewName, viewName, None, Request, id)
        data = c.render()
        print '-------------------end    ' + str(datetime.datetime.now())
        return data

    except Exception as ex1:
        print '----------------'
        print
        print 'Error in importing View: %s.' % viewName
        print ex1
        print traceback.format_exc()
        print '----------------'
    print '-------------------end    ' + str(datetime.datetime.now())
    return HttpResponse()

我需要知道的是第五行的作用,因为我在那里得到了 KeyError 异常:

c = globals()[viewName](viewName, viewName, None, Request, id)

这是回溯:

2016-09-24 09:42:55+0330 [-] -------------------start    2016-09-24 09:42:55.045115
2016-09-24 09:42:55+0330 [-] ----------------
2016-09-24 09:42:55+0330 [-] 
2016-09-24 09:42:55+0330 [-] Error in importing View: HealthSearchPolicy.
2016-09-24 09:42:55+0330 [-] u'HealthSearchPolicy'
2016-09-24 09:42:55+0330 [-] Traceback (most recent call last):
2016-09-24 09:42:55+0330 [-]   File "/home/shirvani/Desktop/Archive/beasy/views.py", line 167, in view
2016-09-24 09:42:55+0330 [-]     c = globals()[viewName](viewName, viewName, None, Request, id)
2016-09-24 09:42:55+0330 [-] KeyError: u'HealthSearchPolicy'
2016-09-24 09:42:55+0330 [-] 
2016-09-24 09:42:55+0330 [-] ----------------
2016-09-24 09:42:55+0330 [-] -------------------end    2016-09-24 09:42:55.04629

【问题讨论】:

  • 我认为您应该找到编写此代码的人并殴打他。除了代码设计不佳之外,使用globals() 并在最后返回一个空响应会使逻辑更加糟糕。你可以通过打印出globals() 来开始调试,看看里面有什么。
  • 已经这样做了,它的无穷无尽的列表......以及全局:D......我不明白的是那条线的格式。括号有什么作用?
  • globals() 的结果是一个字典。在该字典中查找 viewname 会返回一个函数。括号使用提供的参数调用该函数。

标签: django python-2.7 django-views


【解决方案1】:
c = globals()[viewName](viewName, viewName, None, Request, id)

globals() 为您提供全局变量的字典。 然后[viewName] 它引用了名称与viewName 参数值匹配的特定全局变量。 并且希望它是一个函数,所以它使用这些参数调用。

至于设计,有人试图根据 url 中的值创建要调用的函数列表。

您可以使用 django urls 框架来代替这一切。

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 2013-01-01
    • 2019-03-13
    • 1970-01-01
    • 2010-12-30
    • 2023-03-17
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多