2016-05-26 4 views
0

я получаю эту ошибку в одном из моих тестов:NoReverseMatch в тесте

NoReverseMatch: Reverse for 'plan' with arguments '()' and 
keyword arguments '{u'month': u'201604'}' not found. 
1 pattern(s) tried: ['plan(/(?P<month>[0-9]+))?$'] 

Звонок был

response = self.client.get(reverse('plan', kwargs={'month': '201604'})) 

и URLPATTERN

url(r'^plan(/(?P<month>[0-9]+))?$', sp_views.plan, name='plan'), 

Я пытался позвонить /plan/201604 без жесткого кодирования url. Что я сделал не так?

+0

Пожалуйста, добавьте немного больше информации о том, что ожидается. – Dale

ответ

2

Вам нужно сделать внешний аргумент не-захвата:

url(r'^plan(?:/(?P<month>[0-9]+))?$', text, name='plan'), 

Лично я всегда нахожу это сбивает с толку, поэтому я предпочитаю иметь два шаблона URL. Я также включил бы обратную косую черту:

url(r'^plan/$', sp_views.plan, name='plan'), 
url(r'^plan/(?P<month>[0-9]+)/$', sp_views.plan, name='plan'), 
+0

Эта неуловимая вещь действительно сбивает с толку. Но ваше решение отлично работает. Спасибо! – jammon

+0

Есть ли особая причина, почему вы предпочитаете привязать косые черты? – jammon

+0

Это не имеет большого значения в любом случае, и, честно говоря, это не связано с вашим вопросом. В Django встречаются трейлинг-косые черты, см. [Учебник, например] (https://docs.djangoproject.com/en/1.9/intro/tutorial03/#writing-more-views). Он предотвращает ошибки, когда вы отправляете форму родительскому URL (например, '/ parent /' вместо '/ parent/child'). – Alasdair