gpt4 book ai didi

Django ImageField 图像不显示

转载 作者:行者123 更新时间:2023-12-04 17:46:30 37 4
gpt4 key购买 nike

我正在尝试使用 Django 2.0。我现在正在使用开发“runserver”,所以请记住我还没有投入生产。我熟悉两者在静态文件方面的区别。

我有一个博客文章模型。在管理员中,我希望能够使用 ImageField 将图像添加到我的模型中。我希望它是可选的,如果没有添加则提供默认图像。

我可以在管理员中加载图像。我无法在我的模板中渲染我的图像。控制台显示 Django 正在尝试获取我的图像,但到目前为止我的配置没有起作用。

这是我的模型和相关领域:

from PIL import Image

class Post(models.Model):
....
thumbnail = models.ImageField(default='/img/default.png', upload_to='img', blank=True, null=True)
....

除了 ImageField 之外,我的模型运行良好。我的 View 运行良好,我认为那里没有任何问题。

这是我的 urls.py

....
from django.conf.urls.static import static
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from . import views

urlpatterns = [
....
path('posts/', views.PostListView.as_view(), name='post_list'),
path('post/<int:pk>/', views.PostDetailView.as_view(), name='post_detail'),
path('post/random/', views.random_post, name='random_post'),

]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我完全不确定如何在我的 urls.py 中处理静态文件和媒体文件,尤其是在 2.0 版中对 Django 的更改。

这是我的相关设置。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
....
'django.contrib.messages.context_processors.media',
....
]
},
},
]

MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')
MEDIA_URL = '/media/'

我同样不确定在我的 settings.py 中放什么关于媒体。我的静态 CSS 文件工作正常。我的静态文件中有一个 Logo 图像,它在我的基本模板中呈现。

这是我的 ImageField 模板标签:

<img class="card-image mr-3" src="{{ post.thumbnail.url }}" alt="Generic placeholder image">

最后,我的/static 文件夹和/media 文件夹位于同一目录中。这些都在我的应用程序目录/blog 中。

任何人都可以在这里看到任何明显的错误,或者他们可以提出建议吗?我的问题是默认图像未加载。默认图像位于正确的目录/media/img/中。控制台警告显示“未找到:/media/img/default.png”。

提前致谢。任何建议都会有所帮助。

最佳答案

用于管理面板的 Django ImageField

重要的是,您必须在 urls.py 中定义您的 MEDIA_URL。没有这个定义框架不会给你访问图像的权限设置.py

MEDIA_URL = '/uploads/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')

网址.py

if settings.DEBUG: # new
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

模型.py

class Product(models.Model):
title = models.CharField(max_length=150)
image=models.ImageField(blank=True,upload_to='images/')

def __str__(self):
return self.title

def image_tag(self):
return mark_safe('<img src="{}" height="50"/>'.format(self.image.url))
image_tag.short_description = 'Image'

管理员.py

class ProductAdmin(admin.ModelAdmin):
list_display = ['title','image_tag']
readonly_fields = ('image_tag',)

关于Django ImageField 图像不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287154/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com