Seite 1 von 1

[django] get_absolute_url und Domain/Host...

Verfasst: Dienstag 30. Oktober 2007, 13:57
von jens
Normalerweise gibt get_absolute_url nur eine absolute URL ohne Domain/Host zurück: http://www.djangoproject.com/documentat ... solute-url

Ich brauche aber für einen RSS Feed eine absolute URL mit "http://domain.tld/..."

Nun überlege ich eine zweite Methode, neben get_absolute_url zu implementieren, die halt die Angaben hinzupackt.
Wobei, wie überhaupt Protokoll und Domain zusammen setzten?

Hm... gerade build_absolute_uri gefunden: http://www.djangoproject.com/documentat ... e/#methods
Wie funktioniert das?

Verfasst: Dienstag 30. Oktober 2007, 14:01
von apollo13

Verfasst: Dienstag 30. Oktober 2007, 14:11
von jens
Hm. Das ist irgendwie dumm, das es an request hängt. Wie soll ich im Model eine Methode implementieren die darauf zugreift???

EDIT: OK, also ich mache das nun so:

Code: Alles auswählen

    ...
    pages = Page.objects.all()
    ...
    for page in pages:
        location = page.get_absolute_url()
        absolute_uri = request.build_absolute_uri(location)
        page.absolute_uri = absolute_uri

    return pages
IMHO wäre es aber schöner, wenn man ein get_absolute_uri() beim Modell implementieren könnte. Kann man aber nicht, weil man im Model keinen Zugriff auf das request Objekt hat.
Naja, so geht es erstmal...

Re: [django] get_absolute_url und Domain/Host...

Verfasst: Dienstag 30. Oktober 2007, 14:47
von Y0Gi
jens hat geschrieben:Normalerweise gibt get_absolute_url nur eine absolute URL ohne Domain/Host zurück: http://www.djangoproject.com/documentat ... solute-url
Was ist daran absolut? Es ist vielleicht "relativ absolut", weil der Pfad absolut ist - aber es ist keine absolute URL, genau genommen ist es überhaupt keine URL. Auch für einen RFC-konformen Redirect, der eine absolute URL voraussetzt, taugt das entsprechend nicht. Was haben sich die Django-Entwickler bloß dabei gedacht?

Re: [django] get_absolute_url und Domain/Host...

Verfasst: Dienstag 30. Oktober 2007, 22:07
von apollo13
Vlt. hilft ja http://www.djangoproject.com/documentat ... -full-urls

Das wäre dann unabhängig von Request (allerdings an die sites app gekoppelt und keine http/https Unterscheidung)...

Verfasst: Mittwoch 31. Oktober 2007, 08:57
von jens
Das ist doch mal ein Tip. Allerdings nutzte ich das Site Framework bisher nicht.

Nun hab ich eine andere Lösung, die auch im Model funktioniert:

Code: Alles auswählen

    def get_absolute_uri(self):
        """
        returned the complete absolute URI (with the domain/host part)
        """
        url = self.get_absolute_url()

        if os.environ.get("HTTPS") == "on":
            protocol = "https"
        else:
            protocol = "http"

        domain = os.environ.get("SERVER_NAME")
        if not domain:
            domain = os.environ.get("HTTP_HOST")
        if not domain:
            # Can't build the complete uri without the domain ;(
            # e.g. running the django development server
            return url

        return "%s://%s%s" % (protocol, domain, url)
Also get_absolute_url liefert wie gehabt die URL ohne domain/host.
Das ganze funktioniert aber nur, wenn SERVER_NAME oder HTTP_HOST gesetzt ist. Das ist z.B. nicht der Fall, wenn man den django develoment Server nutzt. Siehe: http://www.python-forum.de/post-81149.html#81149

Ich weiß nicht ob die Reihenfolge (erst SERVER_NAME und danach HTTP_HOST) die Sinnvollste ist.

Irgendwie ist das alles nicht so schön.

EDIT: Hab mal was in die django-users geschrieben, vielleicht hat da jemand eine bessere Idee: http://groups.google.com/group/django-u ... 12cab5a95b