Python 3.5.1
你能看看代码和图片。
这是一些Django代码,但问题与Python有关。
好吧,我收到了错误:
Exception Value:
name 'objects' is not defined
Exception Location:
/home/michael/workspace/pharchive/pharchive/general/templatetags/md_aux.py in get_aux_info, line 17
第17行是context = Context({“objects”:objects})。在图片中它是可见的。
我尝试在上面添加一些对象= []。但这没有帮助。在这种情况下,对象真的是空的。所以,我评论了它。
好吧,在屏幕截图中,如果我们在断点处停下来,我们可以得到什么。我们可以看到对象var在上下文中实际上是可访问的。它包含一些东西。
无论如何,我陷入了变量范围。
我不明白: 1.为什么对象= []没有帮助我。 2.为什么我会收到此错误,而对象可以访问。
你能帮我一把吗?
@register.simple_tag
def get_aux_info(master_document, aux_type):
md = MasterDocument.objects.get(pk=master_document)
template = get_template("general/md_tags.html")
#objects = []
code = "objects = md." + aux_type +"s.all()"
exec(code)
context = Context({"objects": objects})
return template.render(context)
答案 0 :(得分:0)
比构建更简单的方法,exec
将代码作为字符串使用内置的getattr
函数来访问属性。这样可以更清楚地了解正在发生的事情,并完全解决当前的范围问题:
objects = getattr(md, aux_type + 's').all()
Python对这种内省有广泛的支持;使用exec
(和eval
)通常会警告您正在以错误的方式接近某些内容。