django - 静态图像未显示在模板中

django - static image not showing up in template

我只是想显示存储在静态文件夹中的基本图像,但没有显示任何内容。我有 运行 collectstatic 但什么都没有。

路径: /static/logos/IMG_1793.jpg

(打印时显示的内容tenant.image.url

Settings.html:

<img src="{{ imagePath }}" alt="{{ tenant.name }}">

我也试过:src="{% static imagePath %}"

Views.py

def settingsPage(request):
    tenant = get_tenant(request)
    imagePath = tenant.image.url
    context = {'tenant': tenant, 'imagePath': imagePath}
    return render(request, 'setting/settings.html', context)

Models.py

class Tenant(models.Model):
    name = models.CharField(max_length=255)
    subdomain = models.CharField(max_length=255)
    image = models.ImageField(upload_to='static/logos/', blank=True)


class TenantAwareModel(models.Model):
    tenant = models.ForeignKey(Tenant, on_delete=models.CASCADE)

img 标签 src 属性中,您通常放置图像的 URL。所以如果你知道 URL 就把它放在那里而不是放图像名称。

<img src="{{ tenant.image.url }}" alt="{{ tenant.name }}">

如果您处于开发者模式

在settings.py

确保调试为假 (DEBUG = False)
并且您指定了 STATIC_ROOT = 'static/'

解决您的挑战非常直接,首先在您的 setting.py 文件中设置媒体 url 和静态路径相对重要:

# Goes in the setting.py 
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/media')

然后你 link 你的媒体和静态路径在你的主要 urls.py 加载静态文件,有时将你的文件保存在静态和媒体目录中。

#Your main urls.py 
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
]
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

然后我们专注于我们的 view.py 前端渲染数据的所有操作发生的地方。你所做的基本上是好的,所以我会坚持你的约定!但是您错过了从后端获取数据的过程,其中 可能无法为您渲染图像,我想这就是我们的挑战所在。

# our view.py 
# first make sure to import the tenant models

from .models import Tenant

def settingsPage(request):
    # Here we are getting all tenant objects from our backend database
    # to render in the frontend template 
    tenants = Tenant.objects.all()
    context = {'tenants': tenants}
    return render(request, 'setting/settings.html', context)

查看数据后,我们专注于在前端模板中呈现数据。这是我们要显示图像的地方。由于我们的视图不是详细视图,因此我们需要循环遍历模板中视图中的数据以渲染图像。

# our template where the image will be shown.
# here we are looping to get all the objects in tenant
{% for tenant in tenants %} 
<div>
<img src="{{ tenant.image.url }}" alt="">
    {{ tenant.name }}
    {{ tenant.subdomain}}
</div>
{% endfor %}