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

HttpRequestの"request.get_host()"メソッドを使用して、サイトのドメイン名を取得することもできます。これにより、HTTP_X_FORWARDED_HOSTおよびHTTP_HOSTヘッダーからの情報を使用してリクエストの発信元ホストが返され、値が提供されない場合、メソッドはSERVER_NAMEとSERVER_PORTの組み合わせ。

于 2010-07-23T11:53:28.947 に答える
1

オブジェクトが利用できない場合request、最善の方法はDjango Sites フレームワークを使用することだと思います。これには、事前 にsite.domain(および、必要に応じて)を正しく設定する必要があります。に従って設定されます。site.name.get_currentdjango.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 に答える