2009-09-09 86 views
3

在我的模型中,我想使用我在视图中使用的域名(HOST)。 在可视的视图中,感谢“请求”对象。但我该怎么办 这种模型方法?哪些不使用“HttpRequest”对象?在django模型中检测HOST域名

现在我在settings.py中设置一个全局值HOST并使用它,但这是 丑陋。

此外,我不想管理“网站”(网站应用程序) - 有没有办法, 我可以抓住“默认”网站主机名?

非常感谢您的帮助! (对不起我的英文不好)

回答

2

如果您从视图中调用模型方法,则可以将请求参数添加到模型方法,并在从视图中调用该方法时将其包含在内。例如。

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

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

我是正式的愚蠢!谢谢,亚当! :)所以我只需要在该方法中使用request.META ['SERVER_NAME'],对吧? :)再次,非常感谢! – nadomado 2009-09-09 22:58:18

+0

看起来像你需要的那个。 – Adam 2009-09-10 00:12:43

1

您还可以使用“request.get_host()”的HttpRequest的方法来获得网站,这将使用来自HTTP_X_FORWARDED_HOST信息和HTTP_HOST头,如果不提供退换货请求的源主机的域名值,该方法将使用SERVER_NAME和SERVER_PORT的组合。

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/'