определить доменное имя HOST в моделях django - PullRequest
3 голосов
/ 09 сентября 2009

В моей модели я хочу использовать доменное имя (HOST), которое я использую в своих представлениях. В представлениях, которые были бы выполнимы, благодаря объекту "запроса". Но как мне это сделать? это моделирует методы? Которые не используют объекты "HttpRequest"?

Теперь я устанавливаю глобальное значение HOST в settings.py и использую его, но это некрасиво.

Кроме того, я не хочу управлять "Сайтами" (приложением "Сайты"). Есть ли способ, Могу ли я получить имя хоста сайта по умолчанию?

Большое спасибо за вашу помощь! (и извините за мой плохой английский)

Ответы [ 3 ]

2 голосов
/ 09 сентября 2009

Если вы вызываете метод модели из представления, вы можете добавить параметр для запроса в метод модели и включить его при вызове из представления. Э.Г.

class MyModel(models.Model):
    ...
    def MyMethod(self, request):
        # Do whatever with request here

def MyView(request):
    mm = MyModel()
    mm.MyMethod(request)
1 голос
/ 20 октября 2010

Если объект request недоступен, лучше всего использовать фреймворк Django Sites *1003*, я думаю. Это требует правильной установки site.domainsite.name, если хотите) заранее. .get_current устанавливается в соответствии с вашим django.conf.settings.SITE_ID.

>>> from django.contrib.sites.models import Site
>>> obj = MyModel.objects.get(id=3)
>>> obj.get_absolute_url()
'/mymodel/objects/3/'
>>> Site.objects.get_current().domain
'example.com'
>>> 'http://%s%s' % (Site.objects.get_current().domain, obj.get_absolute_url())
'http://example.com/mymodel/objects/3/'
1 голос
/ 23 июля 2010

Вы также можете использовать метод request.get_host () HttpRequest для получения доменного имени сайта, который вернет исходный хост запроса, используя информацию из заголовков HTTP_X_FORWARDED_HOST и HTTP_HOST, и, если значение не указано, метод будет использовать комбинацию SERVER_NAME и SERVER_PORT.

...