[英]Serving root-level static files on Heroku with Django?
我需要在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個文件似乎都是錯誤的。
這是我目前的解決方案。 反饋意見。
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()
盡管這是一個老問題,我仍然有問題。 我喜歡從當前解決方案中的列表生成URL的方式,但我不相信這是最好的。
經過一些研究,我發現realfavicongenerator.net是一個非常有用的資源,它為你生成所有必需的favicons文件,我發送這個帖子似乎支持建議的解決方案,與更新的Django版本。
基於以上所有,我的解決方案是使用本機站點地圖框架, django-robots用於robots.txt和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",
]
}
然后我生成我的網址:
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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.