Django отправка фотографии профиля с помощью каналов django

Я делаю приложение для чата и хочу показывать картинку профиля пользователя каждый раз, когда он отправляет что-то в чате. Вот код:

Models.py

class Chat(models.Model):
    room_name = models.CharField(max_length=200,null=True)
    message = models.CharField(max_length=200,null=True)

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE,null=True)
    username = models.CharField(max_length=200,blank=False,null=True,unique=True)
    profpic = models.ImageField(upload_to='profpics/',blank=True,null=True)

Consumers.py

# chat/consumers.py
import json
from channels.generic.websocket import AsyncWebsocketConsumer
from .models import *
from main.models import *
class ChatConsumer(AsyncWebsocketConsumer):
    @sync_to_async
    def get_profile(self):
        return self.scope['user'].profile
    async def connect(self):
        self.room_name = self.scope['url_route']['kwargs']['room_name']
        self.room_group_name = 'chat_%s' % self.room_name
        # Join room group
        await self.channel_layer.group_add(
            self.room_group_name,
            self.channel_name
        )

        await self.accept()

    async def disconnect(self, close_code):
        # Leave room group
        await self.channel_layer.group_discard(
            self.room_group_name,
            self.channel_name
        )

    # Receive message from WebSocket
    async def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']
        room = text_data_json['room']
        profile = await self.get_profile()
        profile_pic = profile.profpic
        profpic = json.dumps(str(profile_pic))
        print(profpic)
        username = text_data_json['username']
        await self.save_message(message, room,username)
        # Send message to room group
        await self.channel_layer.group_send(
            self.room_group_name,
            {
                'type': 'chat_message',
                'message': message,
                'username':username,
                'profpic':profpic
            }
        )

    # Receive message from room group
    async def chat_message(self, event):
        message = event['message']
        username = event['username']
        profpic = event['profpic']
        # Send message to WebSocket
        await self.send(text_data=json.dumps({
            'message': message,
            'username':username,
            'profpic':profpic
        }))

chat.html

....
chatS.onmessage = function(e){
    const data = JSON.parse(e.data)
    if(data.message) {
        let username = data.username
        let profilepic = data.profpic
        let messages = document.getElementById('messages')
        let message = document.createElement('div')
        message.setAttribute('id','text')
        message.innerHTML = `<img style='display:inline-block;margin-left:10px;>' src="/media/${profilepic}"></img><span style='color:red;margin-left:10px;'>{{name}}</span><span style='margin-left:10px;'>${data.message}</span>`
        messages.appendChild(message)
        messages.scrollTop = messages.scrollHeight
    }
}
....

Я пытался добавить картинку в этой строке:`` message.innerHTML = `` src="/media/${profilepic}">{{name}}${data.message}```.

Когда я запускаю его, я не получаю ошибок, но изображение не отображается, и вместо этого я получаю это изображение: enter image description here.

В cmd я получаю Not Found: /media/profpics/.

Пожалуйста, ответьте.

Спасибо.

Здесь profile_pic = profile.profpic, измените его на

profile_pic = profile.profpic.url

Тогда ваш HTML-код должен быть

<img style='display:inline-block;margin-left:10px;' src="${profpic}" />
Вернуться на верх