【问题标题】:Django - Display an image with static filesDjango - 显示带有静态文件的图像
【发布时间】:2016-11-23 19:00:47
【问题描述】:

我的项目中的“静态文件”存在一些问题 我想简单地加载图像。 这是我的代码:

views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader

# Create your views here.

def D3(request):
        template = loader.get_template('appli1/D3.html')
        context = {}
        return HttpResponse(template.render(context, request))

urls.py

from django.conf.urls import url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
 
from . import views
 
urlpatterns = [
    url(r'^D3$', views.D3, name='D3'),
]

D3.html

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    {% load staticfiles %}
    <img src="{% static "appli1/testimg.png" %}" alt="My image"/>
</body>
</html>

settings.py

STATIC_URL = '/static/'

图片testimg.png在appli1/static/appli1/中

并且文件 D3.html 在 appli1/templates/appli1/ 中

感谢您的帮助!

编辑: 我的项目结构对我来说似乎很好,也许我错了。这是它的样子:

test_django/
    manage.py
    db.sqlite3
    test_django/
        __init__.py
        settings.py
        urls.py
        wsgi.py
        __pycache__/
            ...
    appli1/
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        urls.py
        views.py
        __pycache__/
            ...
        migrations/
            ...
        static/
            appli1/
                testimg.png
        templates/
            appli1/
                D3.html

【问题讨论】:

  • 尝试按照我在这里提供的答案:stackoverflow.com/questions/29957604/…
  • 不,它不起作用...谢谢帮助!
  • 你把{% load staticfiles %}放在你的html上?改用这个:&lt;img src="{% static 'appli1/testimg.png' %}" alt="My image"/&gt;。图片文件拼写是否正确(区分大小写)?
  • 另外,请检查&lt;img&gt; 标记中的引号。
  • 我把 {% load staticfiles %} 放在 html 文件的顶部(在 !DOCTYPE 上面),我检查了一下,图像拼写正确。

标签: python html django image


【解决方案1】:

您的代码存在以下问题:

1) 检查

中的引号
<img src="{% static "appli1/testimg.png" %}" alt="My image"/>

从技术上讲,在上面的“{% static”将被读取为一个值,然后“%}”作为另一个值,最后“我的图像”作为另一个值。

以下是正确的做法:

<img src="{% static 'appli1/testimg.png' %}" alt="My image"/>

这样 html 读取它“{% static 'appli1/testimg.png' %}”作为一个整体在里面是'appli1/testimg.png'。

2) 由于我不知道您的目录结构和根目录,这可能是另一个问题。

如果在您的 'appli1/static/appli1' 中,您的 'static' 与根目录处于同一级别,那么它将正常工作,我认为即使您的模板也在 'appli1/templates 中也是如此/appli1/' 并且您的模板正在加载。因此证明“静态”在根级别。

否则,如果不是这种情况,甚至您的模板都没有加载(因为我只是假设您的模板正在加载),那么您的根目录“静态”和“模板”文件夹不是同一级别的根目录目录,因此您在 html 中指定的 url 没有发现 html 和静态文件。

【讨论】:

  • 你检查根目录了吗?
  • 感谢您的回答。不幸的是,我已经尝试过使用这些引号 ' ' 但它不起作用。我编辑了我的第一篇文章以展示我的项目结构。 “检查根目录”是什么意思?
  • 我刚看到编辑过的帖子,你的目录结构。正如我在回答中提到的,问题出在根目录上。让我解释一下。
  • 所以基本上,在你的 settings.py 中,你使用 BASE_DIR 定义根目录,它告诉 django 如果没有指定路径,那么在这个目录中查找。因此,默认情况下,您的 BASE_DIR 是您的 manage.py 所在的位置。因此,当您指定 STATIC_URL = '/static/' 时,它将查找与 manage.py 相同级别的文件夹,在您的情况下,它永远不会找到,因为您的静态文件夹位于 'test_django/appli1' 中.因此,您始终将静态和模板文件夹保留在您的应用程序文件夹之外,即与 manage.py 的级别相同,即 BASE_DIR 级别。试试看。
  • 我还有一个小问题是当你的视图中的 def D3 渲染它时你的 D3.html 被渲染了。因为我觉得你会在那里遇到与 settings.py 相同的目录问题,我们还在 TEMPLATES 块下指定模板的目录。将模板也保持在 BASE_DIR 级别是一个很好的做法,方法是在 TEMPLATES 块下写入 -> 'DIRS': [os.path.join(BASE_DIR, 'templates')],
【解决方案2】:

您可能遇到的问题之一是您的项目 settings.py 文件中的 STATIC_DIR 设置可能未配置。 Django 文档中有一个部分非常容易理解。在你这样做之后,当你有 {% load static %} 标签时,当你插入一个 {% static 'path/to/file.txt' %} 标签时,Django 将在你的项目的主静态文件中查找,然后找到app 文件夹,然后按照您从那里布置的路径。例如,如果您的文件位于 static/main/images/fart.png 中名为 'main' 的应用程序中,那么您只需将 scr="{% static static/main/images/fart.png%} "

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 2017-07-09
    • 2017-04-04
    • 2020-11-28
    • 2017-04-14
    • 1970-01-01
    • 2020-06-21
    • 2021-05-30
    相关资源
    最近更新 更多