我正在使用Django 0.97 pre(是的,我的网站仍未升级为与trunk兼容)。我使用apache + fastcgi。而且我有一个奇怪的问题:有时(我无法猜测顺序)一些视图会抛出这样的错误:
Tried audio_index in module mysite.audio.views. Error was: 'module' object has no attribute 'validators'
此视图中没有任何验证器调用:
def audio_index(request, language):
audio_list = AudioFile.objects.all().filter(lang = language).order_by('-title')
audio_list = list(audio_list)[:10]
sections_list = AudioCategory.objects.all().filter(lang = language)
template_name = 'audio/index_' + language + '.html'
t = loader.get_template(template_name)
c = Context({
'sections_list': sections_list,
'lang': language,
'audio_list': audio_list,
'len1': len(audio_list),
'menu_item': 'audio',
})
return HttpResponse(t.render(c))
最有趣的事实是,如果我将在一段时间后重新加载此页面,它将加载绝对正确(我不会在它之前更改数据库中的任何代码或数据)。 你有什么想法,它是什么?也许这是非django问题(apache?db?)?
完整的堆栈跟踪如下:
Traceback:
File "/home/shal_prod/django/django_src/django/core/handlers/base.py" in get_response
73. callback, callback_args, callback_kwargs = resolver.resolve(request.path)
File "/home/shal_prod/django/django_src/django/core/urlresolvers.py" in resolve
233. sub_match = pattern.resolve(new_path)
File "/home/shal_prod/django/django_src/django/core/urlresolvers.py" in resolve
172. return self.callback, args, kwargs
File "/home/shal_prod/django/django_src/django/core/urlresolvers.py" in _get_callback
184. raise ViewDoesNotExist, "Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e))
Exception Type: ViewDoesNotExist at /ru/about/
Exception Value: Tried index in module mysite.about.views. Error was: 'module' object has no attribute 'validators'
答案 0 :(得分:1)
我无法解答您的问题(除了说请发布您的模型代码,因为我怀疑问题存在),但是我可以指出这两行:
audio_list = AudioFile.objects.all().filter(lang = language).order_by('-title')
audio_list = list(audio_list)[:10]
非常低效。你在这里做的是获取所有所有 AudioFile对象,实例化它们,然后抛弃除了10之外的所有对象。你应该做的只是这样:
audio_list = AudioFile.objects.all().filter(lang=language).order_by('-title')[:10]
这样Django在评估之前会对查询集进行切片,并且只询问数据库中是否有10个对象开始。如果真的需要,你总是可以在切片后将它转换成一个列表。
答案 1 :(得分:0)
如果没有应用程序的堆栈跟踪,这很难调试。
错误消息的含义是您的某个模块期望另一个模块包含一个名为“validators”的变量
我的猜测是你在某个方法中指定该名称的全局变量,然后期望它出现在另一个方法中。尝试在代码中查找关键字验证器并查看其使用位置。
编辑: 基于原始海报的堆栈跟踪,看起来处理URL的视图未被导入。看起来视图使用名称而不是模块函数来使用URL字符串。
尝试更改此声明网址
的模式urlpatterns = patterns('',
(r'^admin/(.*)', 'admin.site.root'),
到这个模式
import admin.site
urlpatterns = patterns('',
(r'^admin/(.*)', admin.site.root), #note string is gone here