我的图片没有显示post.photo,我的cpanel主机上的url调用

vc6uscn9  于 2022-10-22  发布在  Python
关注(0)|答案(1)|浏览(150)

你好,我刚刚把我的博客放到了cpanel主机上。我用python的白化库管理显示。静态图像正常工作。但是当我从blogpost调用图像来显示我的图像时,我的图像不会出现在post.photo.url中。我在cpanel下,我想请你帮忙在我的网站上显示我的博客图片

class Photo(models.Model):
image = models.ImageField(verbose_name='image')
caption = models.CharField(max_length=128, blank=True, verbose_name='légende')
date_created = models.DateTimeField(auto_now_add=True)

IMAGE_MAX_SIZE = (1900, 1265)

def resize_image(self):
    image = Image.open(self.image)
    image.thumbnail(self.IMAGE_MAX_SIZE)
    image.save(self.image.path)

def save(self, *args,**kwargs):
    super().save(*args,**kwargs)
    self.resize_image()

def __str__(self):
    return self.caption

My models.py

class BlogPost(models.Model):
slug = models.SlugField()
categorie = models.ForeignKey(CategorieBlogs, on_delete=models.CASCADE)
image = models.ForeignKey(Photo, on_delete=models.CASCADE)
title = models.CharField(max_length=500, verbose_name="titre blog")
subtitle = models.CharField(max_length=500, verbose_name="sous titre")
contenu = models.TextField(max_length=1500, verbose_name="contenu blog")
description = models.TextField(max_length=2000, verbose_name="contenu blog 2")
titles = models.CharField(max_length=500, verbose_name="titre 2")
photo = models.ImageField(upload_to="photo blog")
contenus = models.TextField(max_length=2000, verbose_name="paragraph 2", blank=True)
descriptions = models.TextField(max_length=2000, verbose_name="paragraph contenu 2", blank=True)
datepub = models.DateField(verbose_name="Date de publication", auto_now_add=True)
published = models.BooleanField(default=False)
auteur = models.ForeignKey(AuteurPost, on_delete=models.CASCADE)

def save(self, *args,**kwargs):
    if not self.slug:
        self.slug = slugify(self.title)

    super().save(*args,**kwargs)

def get_absolute_url(self):
    return reverse("posts:home")

def __str__(self):
    return self.title

class Meta:
    ordering = ['-datepub']
    verbose_name = "Blog"

My views
class BlogHome(ListView):
model = BlogPost
context_object_name = "posts"
template_name = "blog/list.html"

def get_queryset(self):
    queryset = super().get_queryset()
    if self.request.user.is_authenticated:
        return queryset

    return queryset.filter(published=True)

class BlogPostDetail(DetailView):
model = BlogPost
context_object_name = "post"
template_name = "blog/detail.html"

My urls.py
from django.urls import path
from .views import BlogHome, BlogPostDetail

app_name = "posts"

urlpatterns = [
    path('', BlogHome.as_view(), name="home"),
    path('<str:slug>/', BlogPostDetail.as_view(), name="post"),

]

我的html代码

<header class="masthead" style="background-image: url('{{ post.image.image.url }}')">
        <div class="container position-relative px-4 px-lg-5">
            <div class="row gx-4 gx-lg-5 justify-content-center">
                <div class="col-md-10 col-lg-8 col-xl-7">
                    <div class="post-heading">
                        <h1>{{post.title}}</h1>
                        <h2 class="subheading">{{post.subtitle}}</h2>
                        <span class="meta">
                            Publié Par
                            <a href="#!">{{post.auteur }}</a>
                            le {{ post.datepub}}
                        </span>
                    </div>
                </div>
            </div>
        </div>
    </header>
    <!-- Post Content-->
    <article class="mb-4">
        <div class="container px-4 px-lg-5">
            <div class="row gx-4 gx-lg-5 justify-content-center">
                <div class="col-md-10 col-lg-8 col-xl-7">
                    <p> {{ post.contenu }}</p>
                    <p> {{ post.description }}</p>
                    <h2 class="section-heading">{{ post.titles }}</h2> <br> <br>
                    <img class="img-fluid" src="{{ post.photo.url }}" alt="post.photo" />
                    <p>{{ post.contenus }}</p>
                    <p> {{post.descriptions}}</p>
                </div>
            </div>
        </div>
    </article>
uoifb46i

uoifb46i1#

首先,我认为您没有配置静态文件和媒体文件。尝试按如下方式配置它。在您的settings.py中,确保将STATICFILES_DIR, STATIC_ROOT, MEDIA_URL, MEDIA_ROOT包含在settings.py内,然后将以下行添加到STATIC_URL = 'static/'下面

MEDIA_URL = 'media/'
STATICFILES_DIRS = [BASE_DIR / 'static']
STATIC_ROOT = BASE_DIR / 'staticfiles/'
MEDIA_ROOT = BASE_DIR / 'static/media'

通过这样做,您可以告诉django在哪里获取静态文件。现在,您必须在项目urls.py中添加静态文件的链接。

from django.conf import settings
from django.conf.urls.static import 
static

urlpatterns = [
     .......
   ]
urlpatterns += 
static(settings.STATIC_URL, 
document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, 
document_root=settings.MEDIA_ROOT

我假设您已经做的最后一件事是在项目根目录中创建静态文件夹,并在该静态文件夹中创建媒体文件夹,其中包含所有要加载的图像。现在运行python manage.py collectstatic

相关问题