【问题标题】:Image not displaying in Django 1.8 template图像未显示在 Django 1.8 模板中
【发布时间】:2015-05-31 19:50:59
【问题描述】:

我想显示来自名为 index 的 Django 应用程序内的静态文件夹中的图像。但它在浏览器中显示图标,这意味着它在<img src=""/> 中指定的路径中找不到图像。这是我的目录结构:

|-- db.sqlite3
|-- images
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- settings.py
|   |-- settings.pyc
|   |-- urls.py
|   |-- urls.pyc
|   |-- wsgi.py
|   `-- wsgi.pyc
|-- index
|   |-- admin.py
|   |-- admin.pyc
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- migrations
|   |   |-- __init__.py
|   |   `-- __init__.pyc
|   |-- models.py
|   |-- models.pyc
|   |-- static
|   |   `-- index
|   |       `-- file2
|   |-- templates
|   |   `-- show.html
|   |-- tests.py
|   |-- urls.py
|   |-- urls.pyc
|   |-- views.py
|   `-- views.pyc
`-- manage.py

views.py

def show(request):
    return render(request, 'show.html', {})

urls.py

from django.conf.urls import url
from django.conf import settings
from django.conf.urls.static import static

from index import views

urlpatterns = [
    url(r'^show$', views.show),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

show.html

{% load staticfiles %}
<img src="{% static "index/file2" %}" alt="test_image"/>

我曾尝试关注this,但显然做得不对。任何帮助将不胜感激。

【问题讨论】:

  • 您是否已将 STATICFILES_DIRS 添加到您的 settings.py 中?
  • no.. 只是默认添加的STATIC_URL = '/static/'。这是必需品吗?
  • 我不确定这是不是问题所在。您能否将您的 settings.py 添加到您的问题中?
  • 有几件事,第一,你能直接导航到这张图片,即……把图片放在url里自己看吗?如果是这样,那么作为未显示的该图像的 src 位置放置的是什么?这很可能只是一个不正确的 Static_Root 设置。
  • 我没有 STATIC_ROOT,我需要一个吗?我认为 STATIC_URL 就足够了。我不知道哪个是为了哪个目的!

标签: django image static media


【解决方案1】:

经过大量试验,最后我结合 Stackoverflow 的答案得到了它。真的,这并不简单。呸!不过,我很高兴,也微笑着。 我已经使用 Apache 和 mod_wsgi (Xampp) 在 Windows 上设置了 Django 1.8。 'vrsite' 是我的网站。 'vrapp' 是我的应用程序。图像最终显示从 vrsite> vrsite > vrapp > static > vrapp >23-oracle.jpg 我获取图像显示的步骤如下: 1.目录结构: C:...\myvirtualwebenv27_1\xampp\htdocs\vrsite\manage.py

vrsite

  -- manage.py
  -- static
          --media
  -- static_dirs
          -- css
          -- img
                -- 23-oracle.jpg
          -- js
  -- static_root
          -- admin
               -- css
               -- img
               -- js
          -- css
          -- img
                -- 23-oracle.jpg
          -- vrapp
                 --23-oracle.jpg
  -- vrsite
          -- __init__.py
          -- settings.py
          -- urls.py
          -- wsgi.py
          -- vrapp
                 -- migrations
                 -- static
                         -- vrapp
                                -- 23-oracle.jpg

                 -- templates
                         -- index.html
                 -- __init.py__
                 -- admin.py
                 -- models.py
                 -- tests.py
                 -- views.py

2。设置.py

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

INSTALLED_APPS = (
'django.contrib.staticfiles',
    'vrsite.vrapp',
)

ROOT_URLCONF = 'vrsite.urls'

WSGI_APPLICATION = 'vrsite.wsgi.application'

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static_root')
#STATIC_ROOT = 'static'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static', 'static_dirs'),
)

MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media')

MEDIA_URL = '/media/'
  1. urls.py

    从 django.conf.urls 导入模式,包含,url

    from django.contrib import admin
    from django.conf import settings
    from django.conf.urls.static import static
    
    urlpatterns = [
        url(r'^$', 'vrsite.vrapp.views.home'),
    ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    
  2. views.py

    从 django.shortcuts 导入渲染

    从 django.shortcuts 导入 render_to_response

    def home(request):
    
            return render_to_response('index.html')
    
  3. index.html

{% load staticfiles %}

<img src="{% static "vrapp/23-oracle.jpg" %}" alt = "My image"/>

正文>

  1. 如下运行collect static

    (myvirtualwebenv27_1) C:...\myvirtualwebenv27_1\xampp\htdocs\vrsite> C:...\myvirtualwebenv27_1\Scripts\python manage.py collectstatic

    您已请求在目的地收集静态文件 设置中指定的位置:

    C:\...\myvirtualwebenv27_1\xampp\htdocs\vrsite\static\static_root
    

    这将覆盖现有文件! 您确定要这样做吗?

    输入“yes”继续,或输入“no”取消:yes 复制 C:...\myvirtualwebenv27_1\xampp\htdocs\vrsite\vrsite\vrapp\static\vrapp\23-oracle.jpg'

    1 个静态文件复制到 'C:...\myvirtualwebenv27_1\xampp\htdocs\vrsite\static\static_root',64 个未修改。

【讨论】:

  • 这个真的很全面。感谢您的努力@Sri Srii。但我的问题已通过STATIC_ROOT = 'static' 解决。但是,您能告诉我如何在显示文件时调整文件大小吗?不是图像的原始尺寸,而是我想要显示的东西。假设图像可以大或小,但我想以 400x400 的分辨率显示它。
  • @MiniGunnR,欢迎您!在我的情况下 STATIC_ROOT = 'static' 不起作用。如果有人可以解释为什么它在某些情况下有效而在其他情况下无效,那将是有用的知识。关于图像的调整大小,我到目前为止还没有使用过。我已经研究了一些关于创建缩略图的研究,因为我将很快实现它 - 请使用“django thumbnails”谷歌,你可能会找到一些资源。
【解决方案2】:

我设置了STATIC_ROOT = 'static',它现在在网页上显示图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多