检测django模型中的HOST域名

时间:2009-09-09 15:48:43

标签: django django-models django-urls

在我的模型中,我想使用我在视图中使用的域名(HOST)。 在视图中,由于“请求”对象,这是可行的。但是我该怎么办 这个模型的方法?哪个不使用“HttpRequest”对象?

现在我在settings.py中设置一个全局值HOST并使用它,但那就是 难看。

另外,我真的不想管理“网站”(网站应用) - 有办法吗? 我可以获取“默认”站点主机名?

非常感谢你的帮助! (抱歉我的英语不好)

3 个答案:

答案 0 :(得分:2)

如果从视图中调用模型方法,则可以将请求的参数添加到模型方法,并在从视图中调用它时包含它。 E.g。

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

def MyView(request):
    mm = MyModel()
    mm.MyMethod(request)

答案 1 :(得分:1)

您还可以使用HttpRequest的“request.get_host()”方法来获取站点的域名,这将使用来自HTTP_X_FORWARDED_HOST和HTTP_HOST标头的信息返回请求的原始主机,如果不提供值,则该方法将使用SERVER_NAME和SERVER_PORT的组合。

答案 2 :(得分:1)

如果request对象不可用,我认为最好的方法是使用Django Sites framework。这需要事先正确设置site.domain(和site.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/'