2012-07-21 16 views
14

私はHerokuでいくつかのルートレベルの静的ファイルを提供する必要があります(例えば、domain.com/favicon.ico)。それが現在立っているとしてここでは、ファイルのリストです:Heroku上のDjangoでルートレベルの静的ファイルを扱う?

favicon.ico 
crossdomain.xml 
sitemap.xml 
robots.txt 
humans.txt 
apple-touch-icon-57x57-precomposed.png 
apple-touch-icon-57x57.png 
apple-touch-icon-72x72-precomposed.png 
apple-touch-icon-72x72.png 
apple-touch-icon-114x114-precomposed.png 
apple-touch-icon-114x114.png 
apple-touch-icon-precomposed.png 
apple-touch-icon.png 

私はハイとロー検索したと静的ファイルの大規模なセットを提供するための標準的な方法を見つけることができません。私がそれらをホストしているところでは、私のurls.pyにある14個のファイルを明示的に定義してリダイレクトするのは間違っているようです。

+0

あなたは主な問題:heroku/S3にファイルを読み込むことができないか、このリソースに正しいURLを設定していますか? – nk9

+0

@ b1-正しいURLを設定してください。 – knite

+0

このマニュアルをお試しください[blog1](http://matthewphiong.com/managing-django-static-files-on-heroku)[blog2](http://www.iknuth.com/2011/10/deploying-a- django-app-to-heroku-with-easy-static-files-on-s3 /)を使用します。私はそれがジャンゴ1.3のためだと思うよ。もしあなたが 'settings.py'を投稿するのを助けなければ。 – nk9

答えて

1

URL設定ファイルが見つかりませんでしたので、herokuはこのサービスを提供していないと思います。

そしてofficial docsによると、あなたは、外部のサービス

EDIT上にデータを保存する必要があります。

ので、Herokuのドキュメントに従ってのみ301は、S3にリダイレクトお手伝いをすることができます。テンプレート内のすべてのメディア(ico、favicons、pngおよび別のイメージ)のファイルは、S3サービスへの絶対パスを設定し、ロボットの場合はurls.pyのset 301のS3へのcrossdomain.xmlを設定します。 sitemap.xmlをより使いやすくするためnative solutions

開発中に正しいリダイレクトコードを使用するのは間違いありません。

+0

私の質問は、私が外部サービス(Amazon S3)を使用していると述べています。私はファイルを提供する最善の方法(例えば、urls.py)について尋ねています。 – knite

+0

私は自分の答えを編集するだけです。コードや抽象的な解決策も必要ですか? ;) – nk9

4

これは私の現在の解決策です。フィードバックは高く評価しました。

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
from settings import STATIC_URL, ASSETS, DEBUG, AWS_STORAGE 

#ASSETS is a tuple: ('favicon.ico, 'robots.txt', ...)  
urls = [('^%s$' % f, 'redirect_to', {'url': STATIC_URL + f}) for f in ASSETS] 
urlpatterns += patterns('django.views.generic.simple', *urls) 

#Serve static files from runserver if in dev mode with S3 off. 
if DEBUG and not AWS_STORAGE: 
    urlpatterns += staticfiles_urlpatterns() 
+0

私はおそらく多くのルート資産を持っていないことを考えると、私はこのソリューションが十分に良いと思います。 –

1

これは古い質問ですが、まだ問題があります。私はURLが現在のソリューションのリストから生成される方法が気に入っていますが、私はそれが最高であると確信していませんでした。しかし、研究のビットの後

は、私が realfavicongenerator.netあなたのために必要なすべてのファビコンファイルを生成し、非常に有用なリソースであることを発見し、私はより多くの最近のDjangoのバージョンで、提案されたソリューションをサポートするように思われる同僚による this postに送られました。上記のすべて、私の解決策に基づいて

は、たとえば、ファイルのリストとしてファイルのキーとして接頭辞、および値を使用して、robots.txtのとROOT_ASSETS辞書のネイティブサイトマップフレームワーク、 django-robotsを使用している:

ROOT_ASSETS = { 
    "images/favicons/": [ 
     "apple-touch-icon-114x114.png", 
     "apple-touch-icon-120x120.png", 
     "apple-touch-icon-144x144.png", 
     "apple-touch-icon-152x152.png", 
     "apple-touch-icon-180x180.png", 
     "apple-touch-icon-57x57.png", 
     "apple-touch-icon-60x60.png", 
     "apple-touch-icon-72x72.png", 
     "apple-touch-icon-76x76.png", 
     "apple-touch-icon-precomposed.png", 
     "favicon.ico", 
    ] 
} 
私はまた私のマスターテンプレートの頭の中で realfavicongenerator.netによって生成されたHTMLを含めてい

from django.conf.urls import patterns, url, include 
from django.contrib.staticfiles.storage import staticfiles_storage 

root_assets_urls = [] 
for prefix, files in ROOT_ASSETS.iteritems(): 
    for f in files: 
     asset_url = staticfiles_storage.url("{prefix}{file}".format(prefix=prefix, file=f)) 
     root_assets_urls.append(
      url(r'^{0}$'.format(f), RedirectView.as_view(url=asset_url)) 
     ) 
root_assets = patterns('', *root_assets_urls) 

urlpatterns = patterns(
    '', 
    url(r'^', include(root_assets)), 
    [...] 
) 

その後、私は私のURLを生成します。

関連する問題