Лучше конечно перейти на 2.0, там более не нужно использовать регулярки для фильтрации значений в урле. Выглидят секасно:
path('user/<int:id>/albums/<int:album_id>', views.list_albums, name="list_albums")
В принципе в 1.10 тоже самое только то что и вырезается при помощи регулярных выражений.
Логика работы диспатчера примерно следующая:
1. Веб сервер получает урл на который перешели (напр. 127.0.0.1:800/user/4/albums/12);
2. Веб сервер вызывает функцию url_dispatcher и передает аргументом путь без айпи адресса;
3. Диспатчер начинает идти циклом по твоему словарю url_patterns сверху вниз, и применять фильтр пока тот не будет True. Фильтр это то что идет первое, в твоем случае в 1.10 это регулярное выражение. И когда оно True, то происходит вызов функции view.NAME и передача в неё параметров из регулярки в виде аргументов.
4. Вью получает аргументы и обьект request и далее по логике вещей, собирает ответ, достает темплейт и кладет туда контекст в виде словаря
5. Ты уже в темплейте можешь гонять словарь циклом или напрямую упоминая его через {{ name }}
P.S. то что в урле указано как name="list_albums' нужно для формирования ссылки на темплейте при помощи функции {% url 'list_albums' %}. Ты на темплейте можешь вставить ссылку вызвав её по имени которое ты вписал в name. Они рекомендуют это использовать что бы не формировать ссылку руками, так как в случае изменения урла тебе надо пройти по всем темплейтам и все везде поменять.
И я хочу добавить что в джанго я сам нубас, и пока я не начал читать документацию я тоже как ты гуглил и искал ответы. Это очень не эффективно для развития. Лучше следовать гайду и понимать почему оно так работает. Например, мне понравился гайд на djangogirls, но щас с выходом 2.0 он устарел и в документации по 2.0 есть неплохой Tutorial хотя и не полный. Там непонятно что делать с авторизацией.