【发布时间】:2011-04-01 18:05:52
【问题描述】:
我一直在尝试将 django-lean 应用程序添加到我的项目中。 django-lean 应用程序不在我正在处理的项目中,它在 PYTHONPATH 上。
我无法通过 django-lean 测试。
似乎问题在于 TestCase 为 urls 定义了一个值:
urls = 'django_lean.experiments.tests.urls'
据我所知,测试仅获取位于 @'django_lean.experiments.tests.urls' 的 url,而不是 来自项目其余部分的网址。
这会导致如下错误消息:
NoReverseMatch: Reverse for 'index' with arguments '()' and keyword arguments '{}' not found.
这些是由项目中的 {% url %} 模板标签触发的。
如何确保项目的所有 url 都可用于测试?
编辑: 有人向我展示了一个打印可见 URL 的脚本:
import urls
def show_urls(urllist, depth=0):
for entry in urllist:
print " " * depth, entry.regex.pattern
if hasattr(entry, 'url_patterns'):
show_urls(entry.url_patterns, depth + 1)
我从 ipdb 调用了这个脚本,输出如下:
ipdb> import urls
ipdb> show_urls(urls.urlpatterns)
^test-experiment/(?P<experiment_name>.*)$
^test-clientsideexperiment/(?P<experiment_name>.*)$
^admin/
^(?P<experiment_name>.+)/$
^$
^main-app/
^goal/(?P<goal_name>.*)$
^confirm_human/$
这对应于位于@'django_lean.experiments.tests.urls'的url
urlpatterns = patterns('django_lean.experiments.tests.views',
url(r'^test-experiment/(?P<experiment_name>.*)$', 'experiment_test'),
url(r'^test-clientsideexperiment/(?P<experiment_name>.*)$', 'clientsideexperiment_test'))
urlpatterns += patterns('',
url(r'^admin/', include('django_lean.experiments.admin_urls')),
url(r'^main-app/', include('django_lean.experiments.urls')),
我遇到的问题是我的测试都失败了,因为来自项目中其他应用程序的命名 url 被 URL 模板标签调用,测试无法访问。
我正在运行 Python 2.7 和 Django 1.2.1
【问题讨论】:
-
好吧,如果你去掉url的显式限制,django默认使用项目url。
-
我尝试注释掉:# urls = 'django_lean.experiments.tests.urls' 我仍然遇到同样的错误。
标签: django django-urls django-testing