Reportlab pdfgenを使用してPDFを作成しています。 PDFには、drawImage
によって作成された画像があります。そのためには、ビューの画像へのURLまたは画像へのパスが必要です。 URLを作成できましたが、画像へのローカルパスを取得するにはどうすればよいですか?
URLの取得方法:
prefix = 'https://' if request.is_secure() else 'http://'
image_url = prefix + request.get_Host() + STATIC_URL + "images/logo_80.png"
これは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/'
dyveの答えは良いものですが、Djangoプロジェクトで「キャッシュストレージ」を使用している場合、静的ファイルの最終的なURLパスは「ハッシュ」されるはずです(style.aaddd9d8d8d7など) .css from style.css)の場合、Django.templatetags.static.static()
で正確なURLを取得できません。代わりに、Django.contrib.staticfiles
のテンプレートタグを使用して、ハッシュされたURLを取得する必要があります。
さらに、開発サーバーを使用する場合、このテンプレートタグメソッドはハッシュされていない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)
@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)
デフォルトのstatic
タグを使用します。
from Django.templatetags.static import static
static('favicon.ico')
Django.contrib.staticfiles.templatetags.staticfiles
には別のタグがあります(受け入れられた回答のように)が、Django 2.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'