2012-07-30 14 views
91

私はPDFを作成するためにreportlab pdfgenを使用しています。 PDFにはdrawImageによって作成された画像があります。このためには、画像へのURLまたはビュー内の画像へのパスが必要です。私はURLを構築することができましたが、イメージへのローカルパスはどのように取得できますか?私は、URLを取得する方法Djangoはビュー内で静的ファイルURLを取得します

prefix = 'https://' if request.is_secure() else 'http://' 
image_url = prefix + request.get_host() + STATIC_URL + "images/logo_80.png" 

答えて

206

これは、Googleで上位の結果であるので、私はこれを行うための別の方法を追加しようと思いました。個人的に私はこの実装をDjangoフレームワークに任せるので、これを好む。あなたは「ハッシュされた」を取得する必要があり、あなたのDjangoプロジェクトと静的ファイルの最後のURLパスに「キャッシュされたストレージを」使用している場合

# 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/' 
+6

これは良い答えです。 – CodingWithoutComments

+2

STATIC_URLに存在しない場合、静的URLにホスト名を追加するクリーンな方法があるかどうか知っていますか? 画像やその他のリソースをメールに追加する必要があります。メールでは、ユーザーは相対URLでリソースを見つけることができません。 – gepatino

+3

これは、デバッグで実行している間は動作しません(DEBUG = Falseでまだ試していません)。私は単に返された静的メソッドに渡されたパスを取得します。 Djangoを使って1.6。何かご意見は? – Shawn

66

dyveの答えは、しかし、良いものである(例えばstyle.aaddd9d8d8d7.cssstyle.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') 
+1

ありがとうございました...なぜ私は私のmd5ハッシュを注入していないのか理解するためにしばらくかかりました – ilovett

+0

@ilovett私の喜び! :) – Kenial

+0

私の答えを改善してくれてありがとう! – dyve

6

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

関連する問題