如何在django模板中将名称反转为绝对URL?

eug*_*ene 26 django url templates

{% url url_name %} 给出一个相对的名字.

我怎么能这样{% absolute_url url_name %}做,它返回url与base(包括端口,如果存在)?

Bla*_*e52 31

有不同的解决方案.编写自己的模板标签并使用HttpRequest.build_absolute_uri(location).但另一种方式,有点hacky.

<a href="{{ request.scheme }}://{{ request.get_host }}{% url url_name %}">click here</a>
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法在这包括协议? (2认同)
  • 2020年还有没有更好的办法? (2认同)

Ane*_*R S 13

您可以build_absolute_uri()在请求对象中使用该方法.在模板中使用此作为request.build_absolute_uri.这将创建包括协议,主机和端口的绝对地址.

例:

 <a href="{{request.build_absolute_uri}}">click here</a>
Run Code Online (Sandbox Code Playgroud)

  • 这只适用于您只对请求的路径感兴趣,而不是任意的`url_name`. (2认同)

igo*_*igo 9

在模板中,我使用它来打印带有协议,主机和端口的绝对URL(如果存在):

<a href="{{ request.scheme }}://{{ request.get_host }}{% url url_name %}">link</a>
Run Code Online (Sandbox Code Playgroud)

在Python中我使用:

from django.core.urlresolvers import reverse

def do_something(request):
    link = "{}://{}{}".format(request.scheme, request.get_host(), reverse('url_name', args=(some_arg1,)))
Run Code Online (Sandbox Code Playgroud)

  • 正如我在回答中所解释的,在 python 中你可以使用:`request.build_absolute_uri(reverse('url_name', args=(some_arg1,)))` (2认同)