2

我一直在尝试将 django-lean 应用程序添加到我的项目中。django-lean 应用程序不在我正在处理的项目中,它在 PYTHONPATH 上。

我无法通过 django-lean 测试。

似乎问题在于 TestCase 为 urls 定义了一个值:

 urls = 'django_lean.experiments.tests.urls'

据我所知,测试只获取位于 @'django_lean.experiments.tests.urls' 的 url,而不是来自项目其余部分的 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 模板标签调用,测试无法访问。

我正在使用 Django 1.2.1 运行 Python 2.7

4

2 回答 2

2

解决方案非常简单。只需将主项目中的 URL 导入应用程序的 urls.py 即可。

from forum.urls import urlpatterns

或更通用的解决方案:

from settings import ROOT_URLCONF as project_urls
urlpatterns = __import__('forum.urls').urls.urlpatterns
于 2010-08-27T21:08:20.697 回答
1

要列出您的 django 知道的所有 url 模式,您可以使用此处建议的答案。从您的测试中运行它并打印/记录输出。

请注意,最好明确说明从哪里导入网址

 from myproject import urls

因为您可能还有其他一些包含 urls 文件的模块。

于 2010-08-24T20:11:52.460 回答