2

これら2つのdjango URLパターン

(r'^articles/(\d{4})/$', 'news.views.year_archive'),
(r'^articles/2003/$', 'news.views.special_case_2003'),

そのspecial_case_2003上に広いパターンがあるため、ビューが呼び出されることはありません

URLパターンを介してどのビューが一致したかを(tests.pyで)テストして、URLが目的のビューと一致していることを確認するにはどうすればよいですか

4

2 に答える 2

3

これでは生の正規表現との一致はできませんが、パターンの例との一致は可能になります:

from django.core.urlresolvers import resolve

def test_foo(self):
    func = resolve('/foo/').func
    func_name = '{}.{}'.format(func.__module__, func.__name__)
    self.assertEquals('your.module.view_name' func_name)
于 2013-03-19T13:21:12.127 に答える
-1

特殊なケースを最初に置く必要があります。

(r'^articles/2003/$', 'news.views.special_case_2003'),
(r'^articles/(\d{4})/$', 'news.views.year_archive'),

URL は上から下に評価されるため、URL が一致する最初のビューがレンダリングされます。これらの URL をブラウザーで使用してテストするか、tests.py で特定のテストを作成することができます。

urls.py をテストする方法の詳細については、 https: //docs.djangoproject.com/en/1.4/topics/testing/#testing-tools を参照してください。これには、200 応答を取得するかどうかを確認する方法と、200 応答を取得する方法の両方が説明されています。特定のコンテンツが存在するかどうかをテストします。

標準的な例を次に示します。

>>> from django.test.client import Client
>>> c = Client()
>>> response = c.post('/login/', {'username': 'john', 'password': 'smith'})
>>> response.status_code
200
>>> response = c.get('/customer/details/')
>>> response.content
'<!DOCTYPE html...'
于 2013-03-19T12:26:42.730 に答える