13

画像を使用するDjangoアプリケーションをセットアップしました。メディア設定 MEDIA_ROOT と MEDIA_URL を正しく設定したと思います。ただし、画像は表示されません。何が問題になるか知っていますか?

この例を考えてみましょう:

画像ファイルは/home/www/media/app/photosの下にあり、 http://example.com/photos/123.jpgをリクエストしようとしています。

これらの設定を使用する必要がありますか?

MEDIA\_ROOT = /home/www/media

MEDIA_URL = http://example.com/app

更新:組み込みの開発サーバーを使用していることを忘れていました。

4

6 に答える 6

14

開発専用

ファイルでこれを行うことにより、開発サーバーで使用する静的メディアサーバーをセットアップできurls.pyます。私はそれをどのように使用するかを示すコードを添付しました(強制されたDEBUG条件とともに)。

from django.conf import settings
from django.conf.urls.defaults import *      

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('', 
    (r'^$', 'views.index'),            

    # Accounts
    (r'^accounts/login/$', 'views.user_login'),
    (r'^accounts/logout/$', 'views.user_logout'),

    # Contrib Modules
    (r'^admin/(.*)', admin.site.root),
)

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

html/media のサブディレクトリに配置MEDIA_ROOTし、そのようにリンクしますsettings.py

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'html/media/').replace('\\','/')

開発が完了すると、プロジェクトは Web サーバーにデプロイされ、そこでディレクティブを使用してApacheによって静的メディア ファイルが提供されます。

于 2008-12-31T21:51:00.277 に答える
12

Django から静的コンテンツを提供することは、開発者自身から推奨されていません (私が間違っていなければ、デバッグ モードでのみ機能します)。代わりに、専用の Web サーバーを使用する必要があります。

とにかく、本当にそれを行う必要がある場合は、静的ファイルの提供方法に関するドキュメントを読んでください。

于 2008-12-31T12:13:01.817 に答える
5

これは、ImageField で画像ファイルを表示する正しい方法です。ユーザーのプロフィール写真があるとします。

models.py:

UserProfile:
    profilePic= models.ImageField( upload_to='PATH_TO_UPLOAD', blank=True, null=True)

settings.py:

MEDIA_ROOT = 'FULL_PATH_OF_MEDIA'
MEDIA_URL = 'URL_OF_MEDIA'

urls.py:

urlpatterns = [
.
.
.
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

PATH_TO_UPLOAD は、ユーザーのアップロード データが移動するパスです。これは FULL_PATH_OF_MEDIA のサブディレクトリです。つまり、アップロードされたファイルには

FULL_PATH_OF_MEDIA/PATH_TO_UPLOAD 

フル パス。これで、このコンテンツは次の URL でアクセスできるようになりました。

SITE_NAME/URL_OF_MEDIA/PATH_TO_UPLOAD

static_files と media_filesでこれを読むこともお勧めします

文書

于 2016-04-02T07:36:52.773 に答える
1

Django404ページを取得していると思われます。画像の1つに直接アクセスして、それが発生しているかどうかを確認してください。

その場合、メディア階層内のリクエストをDjangoに送信せず、代わりに直接提供するようにWebサーバーを構成する必要があります。これが私のApacheconfファイルからの抜粋です。最初のセクションでは、ApacheにすべてをDjangoに送信するように指示しています。2番目のセクションには「SetHandlerNone」があり、「/mediaの下にあるものを通常の方法で処理する」と書かれています。

すべてのエキサイティングな詳細については、http://docs.djangoproject.com/en/dev/howto/deployment/modpython/を参照してください。

PrinceOfPinot.com(別名ポップ)の部分的なhttpd.confファイル:

<Location "/">
    SetHandler python-program
    PythonAutoReload Off
    PythonDebug Off
    PythonPath "['/var/www/production/pop', '/usr/local/lib/python2.5/site-packages/django'] + sys.path"
    SetEnv DJANGO_SETTINGS_MODULE settings
    PythonHandler django.core.handlers.modpython
</Location>

<Location "/media">
    SetHandler None
    AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
</Location>
于 2008-12-31T17:52:08.840 に答える
1

元の質問は開発サーバーに関するものであることは承知していますが、本番環境の回答を探している他の人にとっては:

https://docs.djangoproject.com/en/1.8/howto/static-files/deployment/は、実稼働環境で django がファイルを提供する方法に関するガイドを提供します。ガイドのトーンから、ファイルを処理するために別の Web サーバーを用意するか、Apache で mod_wsgi を使用することが最善であることを暗示しているようです。

于 2015-11-12T16:44:19.107 に答える