0

我正在尝试使用开发服务器为我的 Django 项目提供服务,该项目使用django-skel 1.4设置。我的网站按预期运行,但我的图片除外,它们没有提供。

部分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 如何读取路径:让src="static/img/pic.png",来自我的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

我认为您必须将以下内容添加到urls.py

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

至少我总是这样做的......

于 2012-09-12T00:18:14.340 回答
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 回答