2016-08-17 21 views
1

序文これは私が今この質問(herehere、およびhereを含む)に複数の投稿を読んだと言っています。私が理解していることは、settings.pystatic urlには、これらの静的ファイルを実行するherokuの修正が必要です。私が子供のように説明する必要があるのは、静的ディレクトリがアプリ内にネストされているときに、これをstatic urlにするために微調整するものです。これは最近のチュートリアルで推奨されているベストプラクティスでした。訂正されていただければ幸いです)。herokuにherokuをデプロイしたdjangoアプリにCSS/staticファイルがありません

質問1:mediaファイルは、アプリケーション内またはプロジェクトレベルのディレクトリに保存する必要がありますか?

質問2:メディアファイルはアプリ内のディレクトリ内に保持されている場合は、以下の私のディレクトリのように、そしてどのように私はかつてHerokuのにプッシュ静的ファイルをロードするためにsettings.pyurlを変更することが出来るのですか?

マイプロジェクト構造は以下の通りです:

gvlabs 
    __init__.py 
    __init__.pyc 
    settings.py 
    settings.pyc 
    urls.py 
    urls.pyc 
    wsgi.py 
    wsgi.pyc 
manage.py 
Procfile 
requirements.txt 
runtime.txt 
welcome 
    __init__.py 
    __init__.pyc 
    admin.py 
    admin.pyc 
    apps.py 
    hello.py 
    migrations 
    models.py 
    models.pyc 
    static 
     css 
     fonts 
     images 
     js 
    templates 
     welcome 
      base.html 
      comingsoon.html 
      contact_us.html 
      index.html 
      post_list.html 
    tests.py 
    urls.py 
    urls.pyc 
    views.py 
    views.pyc 

settings.py

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 
PROJECT_DIR = os.path.join(PROJECT_ROOT,'../welcome') 

# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.9/howto/static-files/ 
#STATIC_ROOT = os.path.join(BASE_DIR, 'static') 
STATIC_ROOT= os.path.join(PROJECT_DIR,'static') 

STATIC_URL = '/welcome/static/' 

# Extra places for collectstatic to find static files. 
STATICFILES_DIRS =() 

# Simplified static file serving. 
# https://warehouse.python.org/project/whitenoise/ 

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 

答えて

3
  1. ご使用の構成の主な問題はSTATIC_ROOT設定です。これをos.path.join(BASE_DIR, 'static_root')のように変更してください。

    STATIC_ROOTは空のディレクトリを指している必要があります(存在する必要はありません.Djangoは必要に応じて作成します).Djangoは静的ファイルをまとめて収集し、処理する前に必要な処理を行います。 ではなく、静的ファイルを保存するディレクトリです。

  2. 静的ファイルの格納場所にかかわらず、STATIC_URLの設定を変更する必要はありません。 /static/としてください。これを変更する必要がある主な理由は、静的ファイルをCDN経由で提供しているときです。https://my-cdn.example.com/static/

  3. 静的ファイルをプロジェクトレベルのディレクトリに保存します。時には、再利用可能なアプリケーションを作成するときに、静的なファイルをアプリケーション内のディレクトリに保存することによって、すべてをまとめてバンドルすることが理にかなっています。しかし、私が取り組んできたプロジェクトの多くは、静的ファイルの主要なセットをプロジェクトレベルで保持しています。

  4. 静的ファイルをどこに置くかは、Djangoに指示する限り、どこに置いてもかまいません。あなたはそのように設定STATICFILES_DIRSにディレクトリへのパスを追加することによって、この操作を行います。

    STATICFILES_DIRS = [ 
        os.path.join(PROJECT_DIR, 'static'), 
    ] 
    

    (技術的には、あなたの静的ファイルは、Djangoが自動的にそれらを見つけることができる、しかし、簡単なものを維持させてくださいappディレクトリ内にある場合。サイドノートとして、また、明示的な)

  5. :それはそれはuser-uploadedプロフィール画像などのファイルではなく、あなたに属しているファイルを参照するDjangoの用語では特定の意味を持っているとして、ここで用語「メディア」を使用しないように注意してくださいCSSやJavaScriptファイルのようなコードベース。

+0

徹底的な説明をありがとう。これはトリックでした。メディアや他の洞察力の違いについての相違について知っておくとよいでしょう。 – Jebediah15

関連する問題