在我的模型中,我想使用我在视图中使用的域名(HOST)。 在视图中,由于“请求”对象,这是可行的。但是我该怎么办 这个模型的方法?哪个不使用“HttpRequest”对象?
现在我在settings.py中设置一个全局值HOST并使用它,但那就是 难看。
另外,我真的不想管理“网站”(网站应用) - 有办法吗? 我可以获取“默认”站点主机名?
非常感谢你的帮助! (抱歉我的英语不好)
答案 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/'