2

プロジェクトにdjango-leanアプリを追加しようとしています。django-lean アプリは、私が取り組んでいるプロジェクトにはありません。PYTHONPATH にあります。

django-lean テストに合格することができませんでした。

問題は、TestCase が URL の値を定義していることです。

 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 パターンを一覧表示するには、ここで提案されている回答を使用できます。テストからこれを実行し、出力を印刷/ログに記録します。

次のように URL をインポートする場所を明示的に指定する方がよいことに注意してください。

 from myproject import urls

おそらくurlsファイルを含む他のモジュールがいくつかあるからです。

于 2010-08-24T20:11:52.460 に答える