【问题标题】:How to properly set images in templates with django 1.4 (django-skel setup) using the development server如何使用开发服务器使用 django 1.4 (django-skel setup) 在模板中正确设置图像
【发布时间】:2012-09-04 23:15:51
【问题描述】:

我正在尝试使用开发服务器为我的 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" 无效。但是,为什么这显然对其他人有效,但对我无效?

【问题讨论】:

    标签: python django image static-files


    【解决方案1】:

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

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

    至少我一直是这样的......

    【讨论】:

      【解决方案2】:

      你需要添加

      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 cannot find my media files (on development server)

      【讨论】:

      • 我尝试了 {{STATIC_URL}}{{MEDIA_URL}} 但这不起作用。我不明白这是如何工作的,因为我的 STATIC_URL/static/MEDIA_URL/media/ (有关设置,请参阅问题帖子)。顺便说一句,它用于开发服务器。
      • 你试过src="{{STATIC_URL}}assets/img/pic.png" 吗?
      • 此外,您还应该在项目根目录中运行 ./manage.py collectstatic
      • 我试过src="{{STATIC_URL}}assets/img/pic.png"src="{{MEDIA_URL}}assets/img/pic.png"。我还跑了collectstatic。仍然不提供我的图片。
      • 您可以通过浏览localhost:8000/static/assets/img/pic.png 访问静态资产吗?在DEBUG=True 模式下,它应该会显示一些错误。可以贴一下吗?
      猜你喜欢
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多