Django - 显示带有静态文件的图像

Jér*_*e G 3 html python django image

我的项目中的“静态文件”有一些问题,我只想加载一个图像。这是我的代码:

视图.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))
Run Code Online (Sandbox Code Playgroud)

网址.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'),
]
Run Code Online (Sandbox Code Playgroud)

D3.html

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    {% load staticfiles %}
    <img src="{% static "appli1/testimg.png" %}" alt="My image"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

设置.py

STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)

图像 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
Run Code Online (Sandbox Code Playgroud)

小智 7

您的代码存在以下问题:

1)检查报价

<img src="{% static "appli1/testimg.png" %}" alt="My image"/>
Run Code Online (Sandbox Code Playgroud)

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

以下是正确的做法:

<img src="{% static 'appli1/testimg.png' %}" alt="My image"/>
Run Code Online (Sandbox Code Playgroud)

这样 html 将它读为“{% static 'appli1/testimg.png' %}”作为一个整体,其中位于 'appli1/testimg.png'。

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

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

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