0

開発サーバーを使用して、django-skel 1.4でセットアップされた Django プロジェクトを提供しようとしています。私のサイトは画像を除いて期待どおりに動作しますが、画像は提供されません。

一部のtemplates/home.html

<img width="65px;" src="assets/img/pic.png" alt="" id="symbol" />

この部分で何かを変更する必要があると思います: src="assets/img/pic.png". 私はSOスレッドを見回し、与えられた答えに従って微調整しましたが、うまく機能させることができませんでした。

では、テンプレートに画像を適切に設定するにはどうすればよいでしょうか?

その他の関連情報:

settings.common.py

DJANGO_ROOT = dirname(dirname(abspath(__file__)))

MEDIA_ROOT = normpath(join(DJANGO_ROOT, 'media'))
MEDIA_URL = '/media/'

STATIC_ROOT = normpath(join(DJANGO_ROOT, 'static'))
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    normpath(join(DJANGO_ROOT, 'assets')),
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'compressor.finders.CompressorFinder',
)

プロジェクトのツリー

.
├── apps
│   └── __init__.py
├── assets
│   ├── css
│   │   └── base.css
│   ├── img
│   │   └── pic.png
│   └── js
├── default.db
├── __init__.py
├── libs
│   ├── core
│   │   ├── admin.py
│   │   ├── __init__.py
│   │   ├── models.py
│   │   ├── views.py
│   │   └── views.pyc
│   └── __init__.py
├── settings
│   ├── common.py
│   ├── dev.py
│   ├── __init__.py
│   └── prod.py
├── templates
│   ├── 404.html
│   ├── 500.html
│   ├── home.html
│   └── install.html
└── urls.py

ところで: を使用したソリューションは使用しないでください。if settings.DEBUG可能であれば、適応する必要はありませんurls.py

編集

実行後の最上位ディレクトリのツリーcollectstatic

.
├── fabfile.py
├── gunicorn.py.ini
├── manage.py
├── Procfile
├── project_name
│   ├── apps
│   │   └── __init__.py
│   ├── assets
│   │   ├── css
│   │   │   └── base.css
│   │   ├── img
│   │   │   └── pic.png
│   │   └── js
│   ├── default.db
│   ├── __init__.py
│   ├── libs
│   │   ├── core
│   │   │   ├── admin.py
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   └── views.py
│   │   └── __init__.py
│   ├── settings
│   │   ├── common.py
│   │   ├── dev.py
│   │   ├── __init__.py
│   │   └── prod.py
│   ├── static
│   │   │   └── js
│   │   ├── css
│   │   │   └── base.css
│   │   └── img
│   │       └── pic.png
│   ├── templates
│   │   ├── 404.html
│   │   ├── 500.html
│   │   ├── home.html
│   │   └── install.html
│   └── urls.py
├── README.md
├── reqs
│   ├── common.txt
│   ├── dev.txt
│   └── prod.txt
├── requirements.txt
└── wsgi.py

編集 2

Django がパスを読み取る方法を理解しています: Let src="static/img/pic.png"、 from my settings.common.py:

>>> DJANGO_ROOT
'/home/my_username/web/my_project/my_project'
>>> j = os.path.join(DJANGO_ROOT, 'static/')
>>> print j
/home/my_username/web/my_project/my_project/static

しかし

>>> STATIC_URL
'/static/'
>>> j = os.path.join(DJANGO_ROOT, STATIC_URL)
>>> print j
/static/

したがって、Djangoがおそらくどこかでそれが機能os.path.joinする理由を考えることができる唯一の理由ですが、そうで src="static/img/pic.png"src="{{STATIC_URL}}img/pic.png"ありません。しかし、なぜこれは明らかに他の人には機能するのに、私には機能しないのでしょうか?

4

2 に答える 2

0

追加する必要があります

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.static',
)

そしてあなたに追加staticfilesしますINSTALLED_APPS

imgタグを変更する必要があります

<img width="65px;" src="{{STATIC_URL}}assets/img/pic.png" alt="" id="symbol" />

ユーザーがアップロードしたコンテンツの場合は、次のように置き換え{{STATIC_URL}}ます{{MEDIA_URL}}

関連するDjango がメディア ファイルを見つけられない (開発サーバー上)も参照してください。

于 2012-09-12T07:23:35.780 に答える
0

以下を追加する必要があると思いますurls.py

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

少なくとも私はいつもそうしています...

于 2012-09-12T00:18:14.340 に答える