Как можно осуществить рефакторинг представления?
Я бы посоветовал логику пагинатора использовать нативную для ListView.class SongListView(ListView):
    model = Song
    context_object_name = 'songs_list'
    template_name = 'songs_list.html'
    paginate_by = 10

class AuthorSongListView(SongListView):
    def get_queryset(self):
        queryset = super(SongListView, self).get_queryset()
        author = Author.objects.get(author_slug=self.kwargs.get('author_slug'))
        return queryset.filter(song_author=author)
page = self.request.GET.get('page', 0)
https://docs.djangoproject.com/en/1.9/ref/class-ba...
Если нужно возвращать 404 если страница не существует, то ничего делать не нужно, а если не хочешь 404 - в темплейте укажи, что должно появиться на странице если список пустdef get_queryset(self):
    queryset = super(SongListView, self).get_queryset()
    author = Author.objects.get(author_slug=self.kwargs.get('author_slug'))
    paginator = Paginator(queryset.filter(song_author=author), 10)
    return paginator.page(self.request.GET.get('page', 0))
Лучше не использовать исключения в местах, где их можно часто словить - лучше if
Так будет слегка быстрее