Djangoカスタム静的ビュー-独自の静的ビューを用意する必要はありません
1組み込みのstaticを使用しないのはなぜですか
組み込みのstaticを使用する場合、python3 manage.py runserverで開始しても問題はありませんが、gunicornにデプロイすると、staticにアクセスできなくなります。多くの方法を見つけましたが、解決できませんでした。最後に、自分で表示することにしました。静的ファイルを返すように静的ビューを作成する
2 urls.pyの静的ルートを照合します
from django.urls import re_path
from app1 import views # 导入你的app的视图
urlpatterns = [
# 匹配静态路由
re_path('^static/.*$', views.static),
...
]
3アプリのビューに処理関数を追加する
# 返回静态文件
from django.http import StreamingHttpResponse
from MVonline1.settings import BASE_DIR # 你的设置
from wsgiref.util import FileWrapper
import mimetypes
def static(req):
path = BASE_DIR + req.path_info
content_type, encoding = mimetypes.guess_type(path)
resp = StreamingHttpResponse(FileWrapper(open(path, 'rb')), content_type=content_type)
resp['Cache-Control']="max-age=8640000"
# 静态文件最好加上这句让浏览器缓存,不然会重复请求
return resp
組み込みの静的ファイルにsetting.pyで注釈を付ける
INSTALLED_APPS = [
.....
# 'django.contrib.staticfiles', # 取消自带的static
# 你的app
'app1',
]
設定でSTATICを検索し、
STATIC_ROOT、STATIC_URL、STATIC などのコメントがあるかどうかを確認します
5最後に、/ static / XXXを使用して静的ディレクトリにアクセスします
静的ディレクトリはルートディレクトリBASE_URLの下、manage.pyと同じレベルに配置する必要があります。もちろん、静的ビュー関数の文を変更して調整することもできます。
path = BASE_DIR + req.path_info
しかし、まだルートディレクトリにそれを置くことが推奨される
ために、あなたのすべてのアプリが通過/静的/静的なファイルを得ることができるように
、HTMLの例
<script src="/static/app1/jquery.min.js">
こうすれば、静的ディレクトリに簡単にアクセスでき、どこにどのようにデプロイするか、そして効率が低下してサーバーに過負荷がかかるかどうかについては考慮していません。