3 Stimmen

den HOST-Domainnamen in Django-Modellen erkennen

In meinem Modell möchte ich den Domänennamen (HOST) verwenden, den ich in meinen Ansichten verwende. In Ansichten wäre das dank des "request"-Objekts machbar. Aber wie mache ich diese Modelle Methoden? Welche verwenden keine "HttpRequest"-Objekte?

Jetzt setze ich einen globalen Wert HOST in settings.py und verwende ihn, aber das ist hässlich.

Außerdem möchte ich die "Sites" (die Sites-App) nicht wirklich verwalten - gibt es eine Möglichkeit, wie ich den "standardmäßigen" Site-Host-Namen übernehmen kann?

Herzlichen Dank für Ihre Hilfe! (und sorry für mein schlechtes Englisch)

2voto

Adam Punkte 6589

Wenn Sie die Modellmethode von einer Ansicht aus aufrufen, können Sie der Modellmethode einen Parameter für die Anforderung hinzufügen und ihn beim Aufruf von der Ansicht aus einbeziehen. Z.B..

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

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

1voto

Shreeyansh Jain Punkte 1244

Sie können auch die Methode "request.get_host()" von HttpRequest verwenden, um den Domänennamen der Website zu erhalten. Diese Methode gibt den Ursprungshost der Anfrage zurück, indem sie Informationen aus den HTTP_X_FORWARDED_HOST- und HTTP_HOST-Headern verwendet, und wenn kein Wert angegeben ist, wird die Methode die Kombination aus SERVER_NAME und SERVER_PORT verwenden.

1voto

Carl G Punkte 15555

Wenn die request Objekt nicht verfügbar ist, ist es am besten, die Django-Sites-Framework denke ich. Dies erfordert eine korrekte Einstellung der site.domain (und site.name (wenn Sie wollen) vorher. .get_current wird entsprechend Ihrer 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/'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X