操作 - django 画像 アップロード 表示




Djangoの "Media"ファイルへのアクセス (4)

フォルダ設定:

あなたのプロジェクトのルートは次のようなものでなければなりません:

/app1
/app2
/media
/static
/templates
urls.py
settings.py
manage.py

メディアフォルダは、ウェブサイトの通常の使用中にアップロードされる可能性のある画像、ダウンロード、その他の素材を保持することになっています(つまり、開発が終了した後)

静的フォルダは、サイトの開発の一部であるすべてのCSS / JSおよびその他の資料を保持することになっています

Settings.py:

MEDIA_ROOTは、上記の静的フォルダへの絶対サーバーパスです。 つまり、次のようになります。

MEDIA_ROOT = "/User/Bob/Sites/MySite/Project_root/media/"

MEDIA_URLは、サイトを見ているときにメディアファイルにアクセスする必要のある相対的なブラウザのURLです。 それは(通常)

MEDIA_URL = "media/"

すべての資料はhttp://example.com/media/で見ることができます

同様に、 STATIC_ROOTは次のようになります

STATIC_ROOT = "/User/Bob/Sites/MySite/Project_root/static/"

STATIC_URL

STATIC_URL = "static/" 

ファイルの提供:

djangoにこれらのフォルダの場所とアクセスするための正しいURLを伝えたら、すべての要求を正しくフォルダに渡す必要があります。

通常、プロダクションに参加しているときは、Webサーバーが静的ファイルとメディアファイルを処理する必要があります。

あなたが開発している場合は、ちょうどあなたのためにそれらを提供するdjango開発サーバーを得ることができます。

これを行うには、 http://example.com/static //example.com/mediaに入ってくるすべてのリクエストをMEDIA_ROOTにルーティングし、 http://example.com/static //example.com/staticに入っているすべてのリクエストをSTATIC_ROOTにルーティングするように指示します。

これを行うには、次のようにURLS.pyにいくつかのURLを追加します。

from django.conf import settings
if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^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,
        }),
)

追加

それぞれ独自のCSSファイルとJSファイルを持つアプリが複数ある場合は、それらを単一の/静的/フォルダにスローしたくないかもしれません。 所属するアプリのサブフォルダに配置すると便利です。

/app1/static/ # Specific static folder
/app2/static/
/media/
/static/ # Root static folder

さて、あなたのウェブサーバ/開発サーバは、あなたが見るように言われた静的なファイル(すなわちルート静的フォルダ)を探しているだけなので、サブフォルダ内のすべてのファイルを集めてルートの静的フォルダにコピーする必要があります。 あなたは手でこれを行うことができますが、djangoはこれを行うためのコマンドを提供しています(これは静的なアプリケーションの全体のポイントです)

./manage collectstatic

私はDjangoを好きになりたいですが、開発環境の静的ファイルとメディアファイルのこのビジネスは私を惑わせています。 私の愚かさから私を救出してください。

私は自分の開発マシンにいます。 プロジェクトディレクトリのルートにフォルダmediaがあります。

settings.pyには次のものがあります: MEDIA_ROOT = ''MEDIA_URL = '/media/'

urls.py私は持っている:

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

しかし、メディアファイルを取得する唯一の方法は、 /media/media/ eg <img src="/media/media/image.png" />です。

私は期待して(そして望みます)
<img src="/media/image.png" />

誰でもここで何が起きているのか教えてもらえますか、メディアファイルの取り扱いを設定するための簡単なレシピを教えてください。

どうもありがとうございました。

@ティミーオマホニー - ありがとう! 叙事詩のポスト、そして非常に明確です。 しかし、それはいくつかの質問を残す:

(1)私は/media//static/ media/static/MEDIA_URLSTATIC_URLとして使用するMEDIA_URLあります。何か不足していますか?

(2)コレクティブホース/static/場合collectstatic 、サイトのCSSなど、サイトのCSSをどこに置くのですか? 明らかに/static/はありません。

(3)私はそれらをプロジェクトルートから '_'ディレクトリに置き、それを指すようにSTATICFILES_DIRSを設定します。これは、 urlpatternsディレクティブにもかかわらず、開発サーバーが静的ファイルを取得する場所と思われます。 それが間違っている場合は、開発中にサイトレベルのCSSをどこに置くのか、そしてそれらを変更するときはcollectstatic周辺のワークフローは何ですか?それらを編集して編集する必要がありますか?


あなたのsettings.pyでは、あなたが追加することを確認してください

django.core.context_processors.media

それ以外の場合はテンプレートで使用するとMEDIA_ROOTは機能しません。


私はDjango 1.10を使用しています。 私のmediaフォルダは 'uploads'です。これはsettings.pyの設定です:

MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
MEDIA_URL = '/uploads/'

そして、テンプレートでは、object.nameの前にobject.urlの代わりに名前oを入れました。

    <img src="uploads/{{ imagen_identificativa.name }} " alt="{{imagen_identificativa}}">

それは私のために働く。 私はこれが役立つことを願っています


私はtimmy手続きに従ったが、No module name django.viewsというエラーがdjango.views 。 私のimport django.viewsimport django.viewsを使うと、すべてうまく動作します。つまり、ライブラリのインポートに問題はありません。

しかし、私はこの問題をメインURLファイルでこの手順に従うことで解決できました

from django.conf.urls.static import  static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

https://docs.djangoproject.com/en/dev/howto/static-files/





django