django-pipelineで静的ファイルにhashを追加する


django-pipelineで静的ファイルにhashを追加する
なぜhash静的ファイルが必要ですか?
大手企業でフロントエンドコードの開発と導入方法を見てください.張雲龍の答え.
これにより、静的ファイルが変更されると、最新の変更バージョンが容易に取得され、変更されていない静的ファイルはキャッシュが使用されます.これにより、変更後にユーザの静的ファイルが更新されないという気まずい思いを回避し、キャッシュを十分に利用することができる.
demo
django_pipeline_demo
インストール
sudo mkdir /opt/projects
git clone https://github.com/duoduo369/django_pipeline_demo.git
cd django_pipeline_demo
ln -s $(pwd) /opt/projects
ln -s /opt/projects/django_pipeline_demo/deploy/nginx/django_pipeline.conf /etc/nginx/sites-enabled
pip install -r requirements.txt
python manage.py runserver 0.0.0.0:9888
nginx -s reload
vim /etc/hosts    127.0.0.1:9888 django_pipline_demo.com

djangoのライブラリpipeline
mako, django-mako, django-pipeline-demo
効果はdjango_でpipeline_demoを例に挙げます.
まず最終用法を述べる
  • debugはFalse(オンラインは本来False)でなければなりませんが、Trueの場合はdjangoのデフォルトで静的ファイルを検索する方法でpipelineは使用されません.
  • python manage.py collectstatic
  • djangoプロジェクト
  • を再起動
    アクセントコード解釈
    settings.pyのいくつかの構成、どのように構成django-pipelineをインストールするか、ドキュメントを移動してください.
    いくつかのcollectに関する構成を説明する
    # python manage.py collectstatic       STATIC_ROOT  
    STATIC_ROOT = './statics'
    
    # django            
    TEMPLATE_DIRS = (
        os.path.join(BASE_DIR, 'templates'),
    )
    
    #    css   ,collectstatic          STATIC_ROOT 
    #   pipeline          hash ,  css/index.css
    # collectstatic     css/index.as1df14jah8dfh.css
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, "static_dev"),
    )
    

    templates/common/static_pipeline.html
       mako     url,          url  ,     hash    。
    
    <%!
    from django.contrib.staticfiles.storage import staticfiles_storage
    %>
    
    <%def name='url(file)'><%
    try:
        url = staticfiles_storage.url(file)
    except:
        url = file
    %>${url}</%def>
    

    index.html
        /common/static_pipeline.html,             ${static.url(' hash     ')}
    
    <%namespace name='static' file='/common/static_pipeline.html'/>
    ....
        <link rel="stylesheet" href="${static.url('css/index.css')}" type="text/css" media="all" />
    ....