Неповторяемая ошибка django: у объекта 'module' нет атрибута 'validators' - PullRequest
2 голосов
/ 24 октября 2009

Я использую Django 0.97 pre (да, мой сайт все еще не был обновлен для совместимости с транком). Я использую 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 ]

1 голос
/ 25 октября 2009

Я не могу ответить на вашу проблему (за исключением, пожалуйста, опубликуйте код вашей модели, так как я подозреваю, что проблема есть), но могу ли я указать, что эти две строки:

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 объектов. Вы всегда можете преобразовать его в список после нарезки, если вам действительно это нужно.

0 голосов
/ 25 октября 2009

Это очень сложно отладить без трассировки стека из вашего приложения.

Что означает сообщение об ошибке, так это то, что один из ваших модулей ожидает, что другой модуль будет содержать переменную, называемую «валидаторы»

Полагаю, вы присваиваете глобальную переменную с таким именем в каком-то методе, а затем ожидаете, что она будет присутствовать в другом методе. Попытайтесь найти валидаторы ключевых слов в вашем коде и посмотрите, где они используются.

редактирование: Основываясь на стековой трассировке исходного плаката, похоже, что представление, которое обрабатывает URL, не импортируется. Похоже, что представления используют строки URL с использованием имен, а не функций модуля.

Попробуйте изменить этот шаблон объявления URL-адресов

urlpatterns = patterns('',
    (r'^admin/(.*)', 'admin.site.root'),

к этому шаблону

import admin.site
urlpatterns = patterns('',
    (r'^admin/(.*)', admin.site.root), #note string is gone here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...