453

Django を主力製品として使用してアプリを構築しています。これまでのところ、データベース設定の指定、静的ディレクトリの構成、URL、ビューなどはすべて順調に進んでいます。

カスタム エラー処理に関するドキュメントを読み、UrlsConf で必要な構成を設定し、対応するビューを作成し、404.html と 500.html をアプリのテンプレート ディレクトリ (settings.py にも指定) に追加しました。

しかし、ドキュメントによるとyou can actually view custom error views until Debug is Off、私は自分のものをテストするためにそれをオフにしました。

カスタム 404.html の表示に失敗するだけでなく (実際には読み込まれますが、エラー ページにはそれぞれグラフィック エラー メッセージが含まれているため、見栄えの良い画像として)、エラー ページのソースが読み込まれますが、それ以外は読み込まれません! CSS や Javascript もリンクされていません。

通常、 を設定DEBUG = Falseすると、すべてのビューが読み込まれますが、リンクされたコンテンツ (CSS、Javascript、画像など) は読み込まれません! 何が起こっていますか?静的ファイルとDEBUG設定に関して、何か不足しているものはありますか?

4

19 に答える 19

558

それでも静的にローカルにサーバーする必要がある場合 (デバッグなしでテストする場合など)、devserver を非セキュア モードで実行できます。

manage.py runserver --insecure
于 2011-10-03T19:55:15.527 に答える
437

デバッグをオフにすると、Django は静的ファイルを処理しなくなります。運用 Web サーバー (Apache など) が処理する必要があります。

于 2011-04-29T19:53:49.373 に答える
47

WhiteNoiseを使用して、本番環境で静的ファイルを提供できます。

インストール:

pip install WhiteNoise==2.0.6

wsgi.pyファイルを次のように変更します。

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

そして、あなたは行ってもいいです!

Handlebar Creative ブログの功績。

しかし、本番環境でこの方法で静的ファイルを提供することはお勧めできません。実稼働 Web サーバー (nginx など) がそれを処理する必要があります。

于 2016-02-15T11:57:55.890 に答える
20

開発で静的サーブ ビューを使用している場合は、 DEBUG = True にする必要があります。

警告

これは、DEBUG が True の場合にのみ機能します。

これは、このビューが非常に非効率的であり、おそらく安全でないためです。これはローカルでの開発のみを目的としており、本番環境では決して使用しないでください。

ドキュメント: 開発中の静的ファイルの提供

編集: 404 および 500 テンプレートをテストするためだけにいくつかの URL を追加できます。URL で汎用ビュー direct_to_template を使用するだけです。

from django.views.generic.simple import direct_to_template

urlpatterns = patterns('',
    ('^404testing/$', direct_to_template, {'template': '404.html'})
)
于 2011-04-29T19:53:00.273 に答える
7

これはさまざまな方法でデバッグできます。これが私のアプローチです。

localsettings.py:

DEBUG = False
DEBUG404 = True

urls.py:

from django.conf import settings
import os

if settings.DEBUG404:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve',
         {'document_root': os.path.join(os.path.dirname(__file__), 'static')} ),
    )

必ずドキュメントを読んでください ;)

https://docs.djangoproject.com/en/2.0/howto/static-files/#limiting-use-to-debug-true

于 2011-10-03T18:57:21.310 に答える
6

Django の最新バージョンについては、こちらの回答をご覧ください: https://stackoverflow.com/a/7639983/6180987

1.10未満のdjangoバージョンの場合、ソリューションは機能するはずです:

プロジェクトの urls.py を開いて、この if ステートメントを見つけてください。

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

settings.DEBUG を True に変更すると、常に機能します。ただし、プロジェクトが深刻なものである場合は、上記の他の解決策を検討する必要があります.

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

django 1.10 では、次のように記述できます。

urlpatterns += [ url(r'^media/(?P<path>.*)$', serve, { 'document_root': settings.MEDIA_ROOT, }), url(r'^static/(?P<path>.*)$', serve, { 'document_root': settings.STATIC_ROOT }), ]
于 2016-05-08T22:05:42.957 に答える
3

Marek Sapkota の回答に同意します。ただし、静的ファイルが要求されている場合は、django URFConfを使用して URL を再割り当てできます。

STATIC_ROOTステップ 1: settings.py でパスを定義する

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

ステップ 2: 次に、静的ファイルを収集します

$ python manage.py collectstatic

ステップ 3: ここで、url の先頭に static がある場合は static フォルダーからファイルにアクセスするという URLConf を定義しますstaticfiles。注: これはプロジェクトの urls.py ファイルです。

from django.urls import re_path
from django.views.static import serve

urlpattern += [
  re_path(r'^static/(?:.*)$', serve, {'document_root': settings.STATIC_ROOT, })
]
于 2020-06-19T06:19:33.930 に答える
1

nginx、設定、および URL 構成

Linuxを使用している場合、これが役立つ場合があります。

nginxファイル

your_machn:/#vim etc/nginx/sites-available/nginxfile

server {
    server_name xyz.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/your_prj;
    }

    location /media/ {
        root /var/www/your_prj;
    }
...........
......
}

urls.py

.........
   .....
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('test/', test_viewset.TestServer_View.as_view()),
        path('api/private/', include(router_admin.urls)),
        path('api/public/', include(router_public.urls)),    
        ]
    
    if settings.DEBUG:
        import debug_toolbar
        urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
        urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

設定.py

.....
........
STATIC_URL = '/static/'
MEDIA_URL = '/media/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
.....
....

必ず実行してください:

(venv)yourPrj$ ./manage.py collectstatic
yourSys# systemctrl daemon-reload
于 2021-01-25T16:33:09.103 に答える
0

最も安全ではありませんが、ソース コードを変更できます。案内するPython/2.7/site-packages/django/conf/urls/static.py

次に、次のように編集します。

if settings.DEBUG or (prefix and '://' in prefix):

したがってsettings.debug==False、コードに影響しない場合は、実行後にpython manage.py runserver --runserver静的ファイルを実行してみてください。

: 情報はテスト目的でのみ使用してください

于 2016-10-29T15:15:36.733 に答える