15

Heroku でいくつかのルートレベルの静的ファイルを提供する必要があります (例: domain.com/favicon.ico)。現在のファイルのリストは次のとおりです。

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

高低を検索しましたが、大量の静的ファイルを提供する標準的な方法が見つかりません。それらをホストする場所 (collectstatic または Amazon S3 を使用する Heroku) では、urls.py で 14 個のファイルを明示的に定義してリダイレクトすることは正しくないようです。

4

3 に答える 3

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()
于 2012-09-16T20:08:21.223 に答える
2

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

少し調査した結果、realfavicongenerator.netは、必要なファビコン ファイルをすべて生成する非常に便利なリソースであることがわかりました。提案されたソリューションをサポートしていると思われる同僚から、最新の Django バージョンでこの投稿が送信されました。

上記のすべてに基づいて、私のソリューションは、ネイティブ サイトマップ フレームワーク、 robots.txtの django-robotsおよび ROOT_ASSETS 辞書を使用し、ファイル プレフィックスをキーとして、値をファイルのリストとして使用します。次に例を示します。

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",
    ]
}

次に、次のように URL を生成します。

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)),
    [...]
)

また、マスター テンプレートの頭にrealfavicongenerator.netによって生成された HTML を含めています。

于 2015-11-19T11:19:46.367 に答える
1

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

公式ドキュメントによると、データを外部サービスに保存する必要があります

編集:

したがって、heroku docs によると、S3 への 301 リダイレクトのみが役に立ちます。または、テンプレート内のすべてのメディア (ico、favicons、png およびその他の画像) ファイルの場合は、S3 サービスへの絶対パスを設定し、urls.pyセット 301 の robots および crossdomain.xml を S3 にリダイレクトします。sitemap.xmlの場合は、ネイティブ ソリューションを使用することをお勧めします

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

于 2012-07-24T08:54:52.763 に答える