Ваше выражение регулярного выражения неверно:
Вместо этого:
url('complete/<todo_id>', views.completeTodo, name='complete'),
попробуйте это:
url(r'^complete/(?P<todo_id>\d+)$', views.completeTodo, name='complete'),
Или, если вы хотите использовать path
path('complete/<int:todo_id>', views.completeTodo, name='complete'),
РЕДАКТИРОВАТЬ
Поскольку вы используете Django 1. *, вы не можете использовать path()
Правильный способнастроить все ваши URL-адреса с помощью url
регулярных выражений
Примечание
'^': совпадение должно начинаться с начала строки или строки.
'$': совпадение должно происходить в конце строки
'\ d +': совпадение всех цифр
r
в начале обозначаетregex
url(r'^$', views.index, name= 'index'),
url(r'^add$', views.addTodo, name ='add'),
url(r'^complete/(?P<todo_id>\d+)$', views.completeTodo, name='complete'),
url(r'^deletecomplete$', views.deleteCompleted, name='deletecomplete'),
url(r'^deleteall$', views.deleteAll, name='deleteall')