Answers:
由于这是Google上的最佳结果,我想我应该添加另一种方法来做到这一点。我个人比较喜欢这一点,因为它将实现留给了Django框架。
# Original answer said:
# from django.templatetags.static import static
# Improved answer (thanks @Kenial, see below)
from django.contrib.staticfiles.templatetags.staticfiles import static
url = static('x.jpg')
# url now contains '/static/x.jpg', assuming a static path of '/static/'
request.build_absolute_uri
如下所述:stackoverflow.com/questions/2345708/...
from django.templatetags.static import static
代替。
dyve的答案很不错,但是,如果您在django项目上使用“缓存的存储”,并且静态文件的最终url路径应变为“哈希”(例如,来自style.css的style.aaddd9d8d8d7.css),那么您无法使用获取精确的网址django.templatetags.static.static()
。相反,您必须使用from的模板标记django.contrib.staticfiles
来获取哈希网址。
此外,在使用开发服务器的情况下,此模板标记方法将返回未哈希的url,因此无论使用的是开发主机还是生产主机,都可以使用此代码!:)
from django.contrib.staticfiles.templatetags.staticfiles import static
# 'css/style.css' file should exist in static path. otherwise, error will occur
url = static('css/style.css')
这是另一种方式!(在Django 1.6上测试)
from django.contrib.staticfiles.storage import staticfiles_storage
staticfiles_storage.url(path)
staticfiles_storage.url(path, force=True)
使用默认static
标签:
from django.templatetags.static import static
static('favicon.ico')
中有另一个标记django.contrib.staticfiles.templatetags.staticfiles
(如已接受的答案所示),但在Django 2.0+中已弃用。
@dyve的答案在开发服务器中对我不起作用。相反,我用解决了find
。这是函数:
from django.conf import settings
from django.contrib.staticfiles.finders import find
from django.templatetags.static import static
def get_static(path):
if settings.DEBUG:
return find(path)
else:
return static(path)
如果要获取绝对URL(包括协议,主机和端口),则可以使用request.build_absolute_uri
如下所示的函数:
from django.contrib.staticfiles.storage import staticfiles_storage
self.request.build_absolute_uri(staticfiles_storage.url('my-static-image.png'))
# 'http://localhost:8000/static/my-static-image.png'