在Django中,当我使用:Django的获取绝对URL静态文件
{{ request.build_absolute_uri }}{% static "img/myimage.jpg" %}
它产生: 'http://myurl.com//static/img/myimage.jpg'。这会产生一个错误。
如何删除双斜杠?
静态网址是:
STATIC_URL = '/static/'
但我不认为除去第一“/”将是一个不错的主意。
在Django中,当我使用:Django的获取绝对URL静态文件
{{ request.build_absolute_uri }}{% static "img/myimage.jpg" %}
它产生: 'http://myurl.com//static/img/myimage.jpg'。这会产生一个错误。
如何删除双斜杠?
静态网址是:
STATIC_URL = '/static/'
但我不认为除去第一“/”将是一个不错的主意。
不能完全确定你的要求,但由于{%静态..%}只添加/静态/到您指定路径的面前,你可能只是做自己:
{{ request.build_absolute_uri }}static/img/myimage.jpg
不是非常模块化的,但是大多数时候你不需要直接访问完整的url,因为如果你将它用作某个html对象的src,它会将它附加到你所在的任何url上。
他想知道如何删除第二个斜杠,大概没有绕过静态框架。 –
build_absolute_uri
方法为当前页面构建绝对URI。这意味着如果你在等'http://myurl.com/login/',结果完整的url将是'http://myurl.com/login//static/img/myimage.jpg'。
取而代之的是,使用request.get_host()
(可选地与request.scheme
一起用于url方案),或者最好使用sites framework来为当前站点域设置模板变量。有关代理的get_host()
方法有some issues。
get_host()
方法将返回没有附加路径的当前域。
你能提供完整的例子吗? – Seio
这是'scheme'和'get_host'的例子。 ''因为'//' – Vadorequest
build_absolute_uri
将位置作为处理双斜杠问题的参数。 不幸的是,你不能通过django模板语言传递参数。
您将需要构建一个自定义模板标记或过滤器,它接受build_absolute_uri
函数的参数。
其中一个原因是多方面的,我更喜欢神社,因为我可以做这样的:
{{ request.build_absolute_uri(static('img/foo.png')) }}
我只是做了一个快速模板标签这样做。创建文件/myapp/templatetags/__init__.py
和/myapp/templatetags/my_tag_library.py
,如果没有它们了,并添加以下到my_tag_library.py
:
from django import template
from django.templatetags import static
register = template.Library()
class FullStaticNode(static.StaticNode):
def url(self, context):
request = context['request']
return request.build_absolute_uri(super().url(context))
@register.tag('fullstatic')
def do_static(parser, token):
return FullStaticNode.handle_token(parser, token)
然后在你的模板,只是{% load my_tag_library %}
并使用如{% fullstatic my_image.jpg %}
。
为了回应以前的意见,为什么有人需要这样做,我的特殊使用案例是我想将一个静态文件链接到open graph protocol元标记中,并且这些链接必须是绝对的。在开发过程中,静态文件在本地提供,但在生产中它们被远程提供服务,所以我不能仅仅预先安装主机来获取完整的url。
,所以无法使用'build_absolute_uri'工作,这正是我一直在寻找的。 – lmiguelvargasf
难道你不能简单地放弃'{%static“img/myimage.jpg”%}'?你真的需要'{{request.build_absolute_uri}}'吗? – janos
我需要访问完整路径。 – cusejuice