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">

こうすれば、静的ディレクトリに簡単にアクセスでき、どこにどのようにデプロイするか、そして効率が低下してサーバーに過負荷がかかるかどうかについては考慮していません。

6どなたでも、ご意見、コメント、いいね、批評家を歓迎します

おすすめ

転載: blog.csdn.net/u014126257/article/details/105991336