不可重复的django错误:'module'对象没有属性'validators'

时间:2009-10-24 09:55:26

标签: django apache

我正在使用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'

2 个答案:

答案 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