{% url url_name %}
podaje względną nazwę.Jak cofnąć nazwę do bezwzględnego adresu URL w szablonie django?
Jak mogę zrobić coś takiego, jak {% absolute_url url_name %}
, aby zwracał adres URL z bazą (w tym portem, jeśli jest obecny)?
{% url url_name %}
podaje względną nazwę.Jak cofnąć nazwę do bezwzględnego adresu URL w szablonie django?
Jak mogę zrobić coś takiego, jak {% absolute_url url_name %}
, aby zwracał adres URL z bazą (w tym portem, jeśli jest obecny)?
Istnieją różne rozwiązania. Napisz własny templatetag i użyj HttpRequest.build_absolute_uri(location)
. Ale w inny sposób i nieco hacky.
<a href="{{ request.get_host }}{% url url_name %}">click here</a>
<a href="{{request.build_absolute_uri}}">click here</a>
Spróbuj :)
Sam blok kodu nie zapewnia dobrej odpowiedzi. Dodaj wyjaśnienia (dlaczego rozwiązuje problem, gdzie popełniono błąd itp.). –
Uzyskiwanie dostępu do metody HttpRequest.build_absolute_uri() w szablonie. Będzie to prostsze i łatwiejsze niż {{request.get_host}} {% url url_name%} –
Działa to tylko wtedy, gdy interesuje cię tylko ścieżka zapytania, a nie arbitralna 'nazwa_domeny'. – Flimm
W szablonie używam tego, aby wydrukować bezwzględny adres URL z protokołem, host i port jeśli występuje:
<a href="{{ request.scheme }}://{{ request.get_host }}{% url url_name %}">link</a>
W Pythonie Używam:
from django.core.urlresolvers import reverse
def do_something(request):
link = "{}://{}{}".format(request.scheme, request.get_host(), reverse('url_name', args=(some_arg1,)))
Czy istnieje sposób na uwzględnienie protokół w tym? – Joost
https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.scheme powinien pomóc w rozwiązaniu tego problemu. – Blackeagle52