3

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

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

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

非常感谢你的帮助!(对不起我糟糕的英语)

4

3 回答 3

2

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

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

def MyView(request):
    mm = MyModel()
    mm.MyMethod(request)
于 2009-09-09T16:08:45.723 回答
1

如果request对象不可用,我认为最好的方法是使用Django Sites 框架。这需要事先正确设置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/'
于 2010-10-20T05:35:04.663 回答
1

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

于 2010-07-23T11:53:28.947 回答