2

我有一个我需要一些帮助。在我的 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

2 回答 2

4

Context一种解决方案是通过为您导入的别名来避免冲突:

from django.template import Context as template_context

然后,当您需要您尝试使用的版本时,只需参考 template_context 即可。

于 2013-04-18T15:38:52.000 回答
0

使用模块中的__import__函数__builtins__

#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
于 2013-04-18T15:40:29.227 回答