85

私はDjangoを初めて使用し、開発中の「dubliners」という簡単なプロジェクトと「book」というアプリを通じてそれを学ぼうとしています。ディレクトリ構造は次のようになります。

dubliners/book/  [includes models.py, views.py, etc.]
dubliners/templates/book/

各Webページのヘッダーに表示する必要のあるJPGファイルがあります。ファイルはどこに保存すればよいですか?テンプレートを使用してタグを表示するには、どのパスを使用する必要がありますか?さまざまな場所やパスを試しましたが、今のところ何も機能していません。

..。

以下に投稿された回答をありがとう。ただし、画像への相対パスと絶対パスの両方を試しましたが、Webページに壊れた画像アイコンが表示されます。たとえば、ホームディレクトリに画像があり、テンプレートでこのタグを使用している場合:

<img src="/home/tony/london.jpg" /> 

画像が表示されません。ただし、Webページを静的HTMLファイルとして保存すると、画像が表示されるため、パスは正しいです。たぶん、Djangoに付属しているデフォルトのWebサーバーは、特定のパス上にある場合にのみ画像を表示しますか?

4

12 に答える 12

74

これを試して、

settings.py

# typically, os.path.join(os.path.dirname(__file__), 'media')
MEDIA_ROOT = '<your_path>/media'
MEDIA_URL = '/media/'

urls.py

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

.html

<img src="{{ MEDIA_URL }}<sub-dir-under-media-if-any>/<image-name.ext>" />

警告

注意してください!を使用Context()すると、の値が空になります{{MEDIA_URL}}。代わりに、を使用する必要がありますRequestContext()

これがお役に立てば幸いです。

于 2009-08-05T20:25:36.423 に答える
49

本番環境では、テンプレートから生成されたHTMLが、ホストにメディアファイルが保存されている場所を指しているだけです。したがって、テンプレートにはたとえば

<img src="../media/foo.png">

次に、関連するファイルとともにディレクトリが存在することを確認します。

開発中は別の問題です。djangoのドキュメントでは、そこにリンクしてここに入力する方が効果的であるほど簡潔かつ明確に説明されていますが、基本的には、ディスク上の場所へのハードコードされたパスを使用してサイトメディアのビューを定義します。

ここです

于 2009-05-23T14:04:01.377 に答える
19

あなたの質問はMEDIA_ROOTに保存されているファイルに関するものでしたが、そのタイプのコンテンツを作成する予定がない場合は、コンテンツを静的に保存できる場合があります。
これはまれなケースかもしれませんが、とにかく、サイトに大量の「その日の写真」があり、これらのファイルがすべてハードドライブにある場合はどうでしょうか。

その場合、そのようなコンテンツをSTATICに保存することに矛盾はありません。
そして、すべてが本当に簡単になります。

静的

STATIC_ROOTに保存されている静的ファイルにリンクするには、Djangoには静的テンプレートタグが付属しています。RequestContextを使用しているかどうかに関係なく、これを使用できます。

{% load static %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" />

公式のdjango1.4ドキュメントからコピー/組み込みのテンプレートタグとフィルター

于 2012-09-10T17:54:12.430 に答える
13

開発中
アプリフォルダに「static」というフォルダ名を作成し、そのフォルダに画像を保存します。
画像を使用するには:

<html>
    <head>
       {% load staticfiles %} <!-- Prepare django to load static files -->
    </head>
    <body>
        <img src={% static "image.jpg" %}>
    </body>
</html>

本番環境:
開発と同じように、Djangoのパラメーターをさらにいくつか追加します。

  1. settings.pyを追加します
    STATIC_ROOT = os.path.join(BASE_DIR, "static/")(これにより、すべてのアプリの静的ファイルが保存されるフォルダーが準備されます)

  2. アプリが入っていることを確認してくださいINSTALLED_APPS = ['myapp',]

  3. terminallでコマンドpythonmanage.pycollectstaticを実行します(これにより、INSTALLED_APPSに含まれるすべてのアプリからグローバル静的フォルダー(STATIC_ROOTフォルダー)に静的ファイルのコピーが作成されます)

    これがDjangoに必要なすべてです。その後、Webサーバー側のセットアップを行う必要があります。静的フォルダを使用するための権限。たとえば、構成ファイルhttpd.conf(Windowsの場合)またはsites-enabled/000-default.confのapache2にあります。(Linuxのサイト仮想ホスト部分の下)追加:

    エイリアス\static"path_to_your_project \ static"

    付与されたすべてを要求し

    、それがすべてです

于 2017-03-14T13:11:59.040 に答える
12

私はこれに2日間しっかりと取り組んできたので、自分のソリューションも共有したいと思いました。2010年11月26日の時点で、現在のブランチは1.2.Xであるため、settings.pyに次のものが含まれている必要があります。

MEDIA_ROOT = "<path_to_files>" (i.e. /home/project/django/app/templates/static)
MEDIA_URL = "http://localhost:8000/static/"

*(MEDIA_ROOTはファイルがある場所であり、MEDIA_URLはテンプレートで使用する定数であることを忘れないでください。)*

次に、url.pyに次の場所を配置します。

import settings

# stuff

(r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),

次に、HTMLで次を使用できます。

<img src="{{ MEDIA_URL }}foo.jpg">

djangoの仕組み(私が理解できる限りでは:

  1. htmlファイルでは、MEDIA_URLをsetting.pyにあるMEDIA_URLパスに置き換えます。
  2. url.pyを調べて、MEDIA_URLに一致するものを見つけ、一致するものが見つかった場合(r'^ static /(?P。)$ ' *はhttp:// localhost:8000 / static /に関連します)、検索します。 MEDIA_ROOT内のファイルに対して、それをロードします
于 2010-11-26T11:42:45.400 に答える
10

プロジェクトルートの下の/mediaディレクトリ

Settings.py

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

urls.py

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

レンプレート

<img src="{{MEDIA_URL}}/image.png" > 
于 2015-05-23T09:58:05.640 に答える
9

ファイルがモデル内のモデルフィールドである場合は、テンプレートタグで「.url」を使用して画像を取得することもできます。

例えば。

これがあなたのモデルの場合:

class Foo(models.Model):
    foo = models.TextField()
    bar = models.FileField(upload_to="foo-pictures", blank = True)  

ビューのコンテキストでモデルを渡します。

return render (request, "whatever.html", {'foo':Foo.objects.get(pk = 1)})

テンプレートには、次のものが含まれます。

<img src = "{{foo.bar.url}}">
于 2014-09-08T12:58:19.880 に答える
5

あなたの

<img src="/home/tony/london.jpg" />

URLが。であると想定するため、ディスクから読み取られたHTMLファイルに対して機能しますfile:///home/...。ただし、Webサーバーから提供されるファイルの場合、URLは次のようになりますhttp://www.yourdomain.com/home/tony/london.jpg。これは無効なURLである可能性があり、実際の意味ではありません。

静的ファイルを提供する方法と配置する場所については、このドキュメントを確認してください。基本的に、djangoの開発サーバーを使用している場合は、メディアファイルが存在する場所を彼に示してから、urls.pyそれらのファイルを提供します(たとえば、/static/URLプレフィックスを使用します)。

あなたの中にこのようなものを入れる必要がありますurls.py

(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root': '/path/to/media'}),

本番環境では、これをスキップして、httpサーバー(apachelighttpdなど)に静的ファイルを提供させます。

于 2009-05-23T15:12:28.290 に答える
3

それを行う別の方法:

MEDIA_ROOT = '/home/USER/Projects/REPO/src/PROJECT/APP/static/media/'
MEDIA_URL = '/static/media/'

これには、メディアフォルダを静的フォルダのサブディレクトリに移動する必要があります。

次に、テンプレートで次を使用できます。

<img class="scale-with-grid" src="{{object.photo.url}}"/>
于 2012-06-22T17:44:40.500 に答える
2

うまくいかなかったいろいろな方法を試してみましたが、うまくいきました。ファイル/ディレクトリは次の場所にある必要があります。

プロジェクト/your_app/templatesプロジェクト/your_app/ static

settings.py

import os    
PROJECT_DIR = os.path.realpath(os.path.dirname(_____file_____))
STATIC_ROOT = '/your_path/static/'

例:

STATIC_ROOT = '/home/project_name/your_app/static/'    
STATIC_URL = '/static/'    
STATICFILES_DIRS =(     
PROJECT_DIR+'/static',    
##//don.t forget comma    
)
TEMPLATE_DIRS = (    
 PROJECT_DIR+'/templates/',    
)

proj / app / templates / filename.html

体内

{% load staticfiles %}

//for image

img src="{% static "fb.png" %}" alt="image here"

//note that fb.png is at /home/project/app/static/fb.png

fb.pngが/home/project/app/static/image/fb.png内にあった場合、

img src="{% static "images/fb.png" %}" alt="image here" 
于 2013-06-11T04:59:48.360 に答える
0

djangoプロジェクトでオンライン画像のアドレスを指定すると機能します。それは私のために働いています。あなたはショットを撮る必要があります。

于 2018-07-29T10:03:02.303 に答える
0

また、問題の原因がパスではなく、ファイル名または拡張子であることを確認してください。base.htmlテンプレートに追加された画像の表示に失敗しましたが、画像ファイル拡張子に関連するエラーが見つかりました。画像をjpeg形式で保存する場合は、imgタグの拡張子として.jpgを使用します <img src="{% static 'logo.jpg' %}" alt="Logo">

于 2021-06-16T00:33:57.100 に答える