2016-06-25 162 views
0

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行是上下文語境=({ 「對象」:對象})。在圖片中可見。

我試着在上面添加一些對象= []。但是這並沒有幫助。在這種情況下,對象真的是空的。所以,我評論說。

那麼,在截圖中,我們可以得到我們在斷點處停下來的結果。我們可以看到對象var在上下文中是真正可訪問的。它包含了一些東西。

無論如何,我陷入了變量的範圍。我不明白: 1.爲什麼objects = []沒有幫助我。 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) 

http://s019.radikal.ru/i636/1606/d5/a646b7fe8941.png

+0

你爲什麼使用'exec'?不會'objects = getattr(md,aux_type +'s')。all()'做這個工作嗎? – jonrsharpe

+0

我已經設法自己應對高管。好吧,我getattr沒有在我的軍械庫。現在它是。謝謝 。如果你將它形成答案,我會很樂意接受它。 – Michael

回答

0

一個更容易的方法比建設和exec uting的代碼串是用來訪問屬性內置getattr功能。這使得它更清楚發生了什麼事情,並完全側步的當前範圍的問題:

objects = getattr(md, aux_type + 's').all() 

Python有這種自省的廣泛支持;使用exec(和eval)通常會警告您正在以某種錯誤的方式接近某些事物。