Похоже, что домен является поддоменом вашего собственного веб-сайта, так что имеет значение, что вы не можете отменить эту часть? Используя reverse
, он не использует полные доменные пути, он дает вам путь от корня проекта, поэтому вы можете просто сделать что-то вроде:
new_post_uri = 'http://%s.domain:9292%s' % (site.domain, reverse('manage_new_post'))
Таким образом, вы все еще используете реверс, поэтому вы не жестко программируете URL-адреса (и не заставляете детей плакать), и, насколько я вижу, у вас нет проблем.
Наконец, если вы не хотите жестко кодировать свой собственный домен в коде, используйте модель Django Sites для получения текущего сайта, убедитесь, что вы изменили его с сайта example.com по умолчанию на свой собственный домен. так что, наконец, ваш код может быть:
current_site = Site.objects.get_current() # See the docs for other options
return redirect('http://%s.%s%s' % (site.domain, current_site, reverse('manage_new_post')))
Если вам нужно получить домен без использования объекта Sites, лучше всего подойдет request.get_host () , который получит полный домен плюс порт, но не протокол.
Надеюсь, это все объясняет. Вы можете форматировать вещи немного лучше, но в этом суть.