Я использую два разных подхода в моем models.py
. Первым является декоратор permalink
:
from django.db.models import permalink
def get_absolute_url(self):
"""Construct the absolute URL for this Item."""
return ('project.app.views.view_name', [str(self.id)])
get_absolute_url = permalink(get_absolute_url)
Вы также можете позвонить reverse
напрямую:
from django.core.urlresolvers import reverse
def get_absolute_url(self):
"""Construct the absolute URL for this Item."""
return reverse('project.app.views.view_name', None, [str(self.id)])
Проблема в том, что первый аргумент __ import __ ()
должен быть модулем. Когда вам нужно добраться до объекта с именем, разделенным точками, вы никогда не знаете, какая часть является модулем, а какая нет. Один из способов получить объект module.subname
- это сначала попытаться импортировать его как подмодуль, а в случае сбоя использовать getattr (module, subname)
, как это делает unittest
. Иногда это приводит к ошибке AttributeError
вместо ImportError
. Другой способ сделать это - сначала попробовать getattr (module, subname)
и только в случае неудачи попытаться импортировать. Этот способ не лучше: иногда он выдает ImportError
, тогда как более подходящим было бы AttributeError
.
Вероятно, лучшее, что unittest
может сделать в этом случае, - это создать собственное исключение, говоря что ни импорт, ни поиск атрибутов не удалось. Попробуйте отправить отчет об этой проблеме.
Вы также можете попробовать свой код с помощью Distribute (ответвление setuptools, так как setuptools не очень активно поддерживается). Не знаю, будет ли это по-другому, но попробовать стоит.
Мы обнаружили, что подход DataTemplate имеет некоторые ограничения. Например, шаблон создается как общий экземпляр (singleton). В некоторых сценариях это имеет нежелательные побочные эффекты. Именно поэтому мы используем первую конструкцию ViewModel (с введенным видом).
Подход, который мы используем, описан на странице проекта WPF Application Framework (WAF) :
http://waf.codeplex.com/wikipage?title=Model-View-ViewModel%20Pattern&ProjectName=waf
-121--2870044-Это может быть так же просто, как и случай, когда платформа тестирования не загружает ту же сборку, над которой вы сейчас работаете. У меня это случалось в редких случаях в NUnit, который работает над копией вашей сборки в испытании; иногда он перестал копировать самую последнюю версию. Имеют ли точки останова индикатор «Символы не загружены»?
-121--2432366-Проблема заключается в том, что Python ImportError не сообщает вам, в каком модуле на самом деле произошла ошибка, если вы не внимательно изучите трассировку - чего не делает модуль unittest. У вас будет та же проблема с модулем unittest, независимо от того, какой инструмент вы используете для его запуска.
Вы можете попробовать «носовой» пакет - он имеет плагин setuptools, так что вы можете добавить его в свой setup.py и позволить ему найти и импортировать ваши тесты, вместо использования setuptools по умолчанию поиска тестов. Если я правильно помню, он загружает тестовый код другим способом, чем unittest, и может дать лучшее сообщение об ошибке в этом случае. И даже если это не так, то, вероятно, было бы проще добавить его в нос, чем уловить!