Из того, что я могу собрать, вы сможете использовать {% url forum: thread thread%}, как вы описали. Кажется, что пространства имен всегда определяются двумя переменными, пространством имен и именем приложения.
Если вы затем выполните следующее в urls.py:
url(r'^/forum/', include('forum.urls', namespace='forum', app_name='forum')),
url(r'^/foo/', include('forum.urls', namespace='foo', app_name='forum')),
url(r'^/bar/', include('forum.urls', namespace='bar', app_name='forum')),
В моем понимании, это определяет 3 экземпляра приложения 'форум', 'foo', 'bar' и значение по умолчанию (которое имеет пространство имен == имя_приложения).
Когда вы переворачиваете форум: поток, он использует текущий контекст, чтобы определить, какой из них использовать - если вы находитесь в пространстве имен 'foo', он будет использовать его, в противном случае он вернется к стандартному.
Если кто-то сможет объяснить, как Django решает, что такое «текущее» пространство имен / приложение, это было бы очень полезно. В настоящее время я классифицирую его как «черную магию».
Некоторое разъяснение о фактической разнице между пространством имен и именем_приложения также было бы полезно - возможно, я полностью изменил это. Нынешние документы весьма неоднозначны.
Примечание: у меня это работает для начальных запросов, но в настоящее время я не могу сделать это для AJAX-запросов - по какой-то причине они всегда используют экземпляр по умолчанию.