34

{% url url_name %}相対名を指定します。

{% absolute_url url_name %}ベース付きのURL(存在する場合はポートを含む)を返すようにするにはどうすればよいですか?

4

4 に答える 4

53

さまざまな解決策があります。独自の templatetag を記述して使用します HttpRequest.build_absolute_uri(location)。しかし、別の方法で、少しハッキーです。

<a href="{{ request.scheme }}://{{ request.get_host }}{% url url_name %}">click here</a>

編集:だから私はちょっと混乱しています。現在、これは本当にハックだと思います。独自のテンプレート タグを記述するのがずっと簡単になったので、独自のタグの例をここに示します。

from django import template
from django.urls import reverse

register = template.Library()

@register.simple_tag(takes_context=True)
def abs_url(context, view_name, *args, **kwargs):
    # Could add except for KeyError, if rendering the template 
    # without a request available.
    return context['request'].build_absolute_uri(
        reverse(view_name, args=args, kwargs=kwargs)
    )

@register.filter
def as_abs_url(path, request):
    return request.build_absolute_uri(path)

例:

<a href='{% abs_url view_name obj.uuid %}'>

{% url view_name obj.uuid as view_url %}
<a href='{{ view_url|as_abs_url:request }}'>
于 2013-09-26T09:39:33.503 に答える
11

テンプレートでは、これを使用して、存在する場合はプロトコル、ホスト、およびポートを含む絶対 URL を出力します。

<a href="{{ request.scheme }}://{{ request.get_host }}{% url url_name %}">link</a>

Python では、次を使用します。

from django.core.urlresolvers import reverse

def do_something(request):
    link = "{}://{}{}".format(request.scheme, request.get_host(), reverse('url_name', args=(some_arg1,)))
于 2016-10-30T19:17:43.003 に答える