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?
[django] get_absolute_url und Domain/Host...
Das funzt so:
http://code.djangoproject.com/browser/d ... t__.py#L65
http://code.djangoproject.com/browser/d ... t__.py#L65
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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:
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...
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
Naja, so geht es erstmal...
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?jens hat geschrieben:Normalerweise gibt get_absolute_url nur eine absolute URL ohne Domain/Host zurück: http://www.djangoproject.com/documentat ... solute-url
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)...
Das wäre dann unabhängig von Request (allerdings an die sites app gekoppelt und keine http/https Unterscheidung)...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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:
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
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)
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