Похоже, что в вашем случае достаточно создать url pattern такого вида:
urlpatterns = patterns('',
...
url(r'^pages/(.*)', page_dispatcer),
)
У обработчика будут такие аргументы:
def page_dispatcher(request, path):
...
Далее в page_dispatcher нужно смотреть request.META['HTTP_HOST'], чтобы получить доменное имя, откуда выковырять субдомен. По субдомену найти страницы нужного пользователя и дальше по path выбрать нужную.
Могу предположить, что набор страниц для пользователя меняется не очень часто, поэтому, конечно, не желательно на каждый запрос лезть в базу за списоком страниц. Чтобы этого избежать, результаты запроса можно кешировать. Как именно это сделать, зависит от вашего проекта.