2013-04-18 92 views
2

我有一個,我需要一些幫助。 在我的Django應用程序,我有這樣的代碼:python/django:如何檢測並避免導入名稱衝突?

from django.template import Context 

render_dict = {'scan': oval_scan, 'user': user, 'vulns': oval_vulns, 'asset_vulns': asset_vulns} 
report_html = get_template('oval_report.html').render(Context(render_dict)) 

然而,Django的給了我以下錯誤:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 
    File "/home/nopsec/nopsecvrm/apps/pegasus/views.py", line 2359, in ovalReport 
    report_html = get_template('pegasus/oval_report.html').render(Context(render_dict)) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 121, in render 
    context.render_context.push() 
AttributeError: 'Context' object has no attribute 'render_context' 

我記得有一次,我遇到了這個錯誤,因爲還有另外一個Context別的地方另進口包,這是用來錯誤,所以我改變了這樣的代碼(非常難看,但工程):

import django 

render_dict = {'scan': oval_scan, 'user': user, 'vulns': oval_vulns, 'asset_vulns': asset_vulns} 
report_html = get_template('report.html').render(django.template.Context(render_dict)) 

我的問題是:我怎麼能通過查看回溯錯誤來確定哪個Context錯誤地使用了django?我該如何解決這種情況?謝謝。

回答

4

一個解決辦法是通過別名,你導入Context以避免衝突:

from django.template import Context as template_context 

然後直接在您需要時您要使用的版本來template_context。

+0

這是非常不錯的! –

0

__builtins__模塊使用__import__功能:

#Detecting name conflicts: 
module_name_as_string = 'mymodule' 

if module_name_as_string in globals(): #we have name collision 
    try: 
     custom_module = __import__(module_name_as_string) 
    except ImportError: 
     pass