2009-09-09 99 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/'