我正在使用reportlab pdfgen来创建PDF。在PDF中,有drawImage
创建的图像。为此,我要么需要图像的URL,要么需要视图中图像的路径。我设法建立了URL,但是如何获得图像的本地路径?
我如何获取网址:
prefix = 'https://' if request.is_secure() else 'http://'
image_url = prefix + request.get_host() + STATIC_URL + "images/logo_80.png"
答案 0 :(得分:247)
由于这是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/'
答案 1 :(得分:79)
django.templatetags.static.static()
的精确网址。相反,您必须使用django.contrib.staticfiles
中的模板标记来获取散列网址。
此外,在使用开发服务器的情况下,此模板标记方法返回非散列网址,因此无论主机是开发还是生产,您都可以使用此代码! :)
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')
答案 2 :(得分:12)
这是另一种方式! (在Django 1.6上测试)
from django.contrib.staticfiles.storage import staticfiles_storage
staticfiles_storage.url(path)
答案 3 :(得分:2)
@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)
答案 4 :(得分:1)
在Django 3.0中,您应该使用from django.templatetags.static import static
:
from django.templatetags.static import static
...
img_url = static('images/logo_80.png')
答案 5 :(得分:0)
如果要获取绝对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'
答案 6 :(得分:0)
使用默认的static
标签:
from django.templatetags.static import static
static('favicon.ico')
django.contrib.staticfiles.templatetags.staticfiles
中还有另一个标签(如已接受的答案所示),但在Django 2.0+中已弃用。