web-dev-qa-db-ja.com

Djangoビューで静的ファイルのURLを取得します

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"
119
olofom

これは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/'
258
dyve

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')
80
Kenial

別の方法があります! (Django 1.6でテスト済み)

from Django.contrib.staticfiles.storage import staticfiles_storage
staticfiles_storage.url(path)
12
David Lam

@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)
2

デフォルトのstaticタグを使用します。

from Django.templatetags.static import static
static('favicon.ico')

Django.contrib.staticfiles.templatetags.staticfilesには別のタグがあります(受け入れられた回答のように)が、Django 2.0+では非推奨です。

1
Max Malysh

絶対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'
0
Mesut Tasci