fix: 修复图片显示问题,添加whitenoise优化静态文件性能
Some checks failed
Deploy to Server / deploy (push) Has been cancelled

This commit is contained in:
爽哒哒
2026-03-21 12:18:51 +08:00
parent 68ebf7f100
commit 555b5badbf
6 changed files with 29 additions and 32 deletions

View File

@@ -1,8 +1,16 @@
from rest_framework import serializers
from django.conf import settings
from .models import Competition, CompetitionEnrollment, ScoreDimension, Project, ProjectFile, Score, Comment, HomePageConfig, CarouselItem
from shop.serializers import WeChatUserSerializer
def _media_url(file_field):
"""返回 media 文件的相对路径,避免 build_absolute_uri 生成容器内部地址"""
if file_field and file_field.name:
return settings.MEDIA_URL + file_field.name
return None
class CarouselItemSerializer(serializers.ModelSerializer):
display_image = serializers.SerializerMethodField()
@@ -13,9 +21,7 @@ class CarouselItemSerializer(serializers.ModelSerializer):
'order', 'is_active']
def get_display_image(self, obj):
if obj.image:
return obj.image.url
return obj.image_url
return _media_url(obj.image) or obj.image_url
class HomePageConfigSerializer(serializers.ModelSerializer):
@@ -30,9 +36,7 @@ class HomePageConfigSerializer(serializers.ModelSerializer):
'organizer', 'undertaker', 'carousel1_items', 'carousel2_items']
def get_display_banner(self, obj):
if obj.banner_image:
return obj.banner_image.url
return obj.banner_image_url
return _media_url(obj.banner_image) or obj.banner_image_url
def get_carousel1_items(self, obj):
items = CarouselItem.objects.filter(carousel_type='carousel1', is_active=True)
@@ -62,9 +66,7 @@ class CompetitionSerializer(serializers.ModelSerializer):
'score_dimensions', 'created_at']
def get_display_cover_image(self, obj):
if obj.cover_image:
return obj.cover_image.url
return obj.cover_image_url
return _media_url(obj.cover_image) or obj.cover_image_url
class CompetitionEnrollmentSerializer(serializers.ModelSerializer):
@@ -109,9 +111,7 @@ class ProjectSerializer(serializers.ModelSerializer):
}
def get_display_cover_image(self, obj):
if obj.cover_image:
return obj.cover_image.url
return obj.cover_image_url
return _media_url(obj.cover_image) or obj.cover_image_url
class ScoreSerializer(serializers.ModelSerializer):