【问题标题】:django - static image not showing up in templatedjango - 静态图像未显示在模板中
【发布时间】:2022-01-18 10:53:43
【问题描述】:

我只是想显示一个存储在我的静态文件夹中的基本图像,但没有显示任何内容。我跑了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)

【问题讨论】:

  • 如果可能会问您是否在主 urls.py 文件中配置了静态根媒体设置,如果是,那么我想您可能希望在路径中附加 url,如下所示:~~~
  • 您能否将您的 model.py 添加到您的问题中以帮助解决您的问题。
  • @AbuGodda 我已更新以包含 models.py 文件
  • 我希望我的解决方案能解决@user 的挑战。

标签: django django-models


【解决方案1】:

在解决您的挑战时非常简单,首先在您的 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')

然后您在主 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 %}

【讨论】:

    【解决方案2】:

    如果您处于开发者模式

    在 settings.py 中

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

    【讨论】:

      【解决方案3】:

      img 标记src 属性中通常放置图像的URL。因此,如果您知道 URL,只需将其放在那里,而不是放图像名称。

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

      【讨论】:

        猜你喜欢
        • 2012-06-03
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        • 2015-07-17
        • 2021-06-24
        • 2019-11-25
        • 2022-01-21
        • 1970-01-01
        相关资源
        最近更新 更多