2

私は何日もDjangoの静的ファイルと混同してきました。私はうまく機能する1つの解決策を見つけました。しかし、DEBUG=Falseを設定すると折りたたまれました。そこで、私は新しいプロジェクトを構築し、より明確な外観を得るためにいくつかのテストを行います。まず、デフォルト設定でプロジェクトを作成します。次に、設定ファイルのいくつかの行を次のように変更しました。

STATIC_ROOT = '%s/site_media' % PROJECT_DIR
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(STATIC_ROOT, 'images'),
)

その後、「hi.jpg」を「project_dir / images/hi.jpg」に配置します。runserverを呼び出し、「http://127.0.0.1:8000/static/images/hi.jpg」にアクセスします。動作しません。どうしたの?

4

2 に答える 2

3

仕組みは次のとおりです。その場合DEBUG=True、Djangoは静的ファイル自体を提供します。その場合DEBUG=False、Djangoはそれを実行しなくなり、それを実行するようにWebサーバーを構成する必要があります(Apacheなど)。

Djangoにはそのためのメカニズムがありますdjango.contrib.staticfiles(静的ファイルの管理と静的ファイルアプリを参照)。collectstaticこれは基本的に、Djangoプロジェクトのディレクトリ内のすべての静的ファイルを検索し、/static/それらを1つのディレクトリに配置する管理コマンドを実行する必要があることを意味します( STATIC_ROOT)。これが完了すると、Webサーバーはそのディレクトリから静的ファイルを提供できるようになります。

実行後に1つ以上の静的ファイルが見つからない場合は、collectstatic何かが正しく構成されていないことを意味します。

于 2012-08-20T08:25:54.807 に答える
0

settings.py

PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'site_media')
MEDIA_URL = '/site_media/'
STATIC_URL = '/static/'

if DEBUG:
    STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
else:
    STATICFILES_DIRS = (
        os.path.join(PROJECT_DIR, 'static'),
    )

urls.py

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
    ) 

:)

Django:MEDIA_URLからSTATIC_URLへの移行

于 2012-08-20T08:28:10.300 に答える