Проблема заключается в том, что когда шаблон сопоставляется с 'test /', групповой термин, захваченный регулярным выражением, содержит отображение 'name' => None:
>>> url.match("test/").groupdict()
{'name': None}
Это означает, что когда вызывается представление, используется что-то, что, как я ожидаю, похоже на приведенное ниже:
view(request, *groups, **groupdict)
, что эквивалентно:
view(request, name = None)
для 'test /', что означает, что имя назначено Нет, а не присвоено.
Это оставляет вам два варианта. Вы можете:
- Явно проверьте None в коде представления, что является своего рода хакером.
- Переписать правило отправки URL, чтобы сделать захват имени необязательным, и ввести второе правило для захвата, когда имя не указано.
Например:
urlpatterns = patterns('',
(r'^test/(?P<name>.+)$','myview.displayName'), # note the '+' instead of the '*'
(r'^test/$','myview.displayName'),
)
При втором подходе вы можете просто вызвать метод без шаблона перехвата и позволить python обрабатывать параметр по умолчанию, или вы можете вызвать другое представление, которое делегирует.