Обрабатывать необязательный параметр url в модульном тесте Django

Я создал динамический URL с необязательным параметром

Например, если мой URL-адрес как www.example.com/getTest/1/ Теперь это 1 в URL не является обязательным, для обработки этого в представлениях, которые я использовал

def function(request, id=None):
   pass

Таким образом, если в URL нет идентификатора, функция все еще работает для меня. Но я сталкиваюсь с проблемой при тестировании этого в единичных случаях. если я использую URL как url = reverse('yescourse:academypage_url', args=[None]) это дает мне ошибку

NoReverseMatch: Reverse for 'academypage_url' with arguments '('new', None)' and keyword arguments '{}' not found.

Поэтому, пожалуйста, скажите мне, как я могу обрабатывать эти необязательные ссылки в тестовых случаях или в обратном порядке.

Редактировать:

 url(r'^getTest/(?P<action>\w+)/(?P<id>\d*)$', 'app.views.create_edit_academypage', name='academypage_url'),

1 ответ

Решение

Вы сделали функцию просмотра id необязательный параметр, но он не является обязательным в шаблоне URL. Сначала вам нужно переписать ваш шаблон как:

r'^getTest/(?P<action>\w+)/(?P<id>\d+)?$'

=> весь под-шаблон 'id' является необязательным, но если это не так, он должен соответствовать одному или нескольким числам.

После этого вы можете поменять URL, не передавая args ни kwargs аргументы:

url = reverse('yescourse:academypage_url')

или передав пустой список

url = reverse('yescourse:academypage_url', args=[])

или мимоходом None

url = reverse('yescourse:academypage_url', args=None)

но не передавая список, содержащий None,

Другие вопросы по тегам