#javascript #python #django
Вопрос:
Я создал приложение для чата, такое как WhatsApp, используя каналы Django, redis и веб-сайты. Он включает в себя такие функции, как приватный и публичный чат. Пользователь также может отправлять изображения в чат. Пользовательский интерфейс разработан таким образом, что сообщение отправителя находится справа, а сообщение получателя-слева.
Чего я хочу?
Я хочу добавить функцию, чтобы пользователь мог удалять каждое текстовое сообщение. Я добавил кнопку удаления (выглядит как круг, содержащий символ креста) после каждого чата. Действие удаления выполняется только после обновления страницы. Я хочу, чтобы это произошло без обновления страницы. Поэтому я хочу добавить загрузку шаблона URL в javascript, но это не работает.
Он показывает ошибки, такие как «Не удалось проанализировать остаток» (ошибка django) или «$ не определен» (ошибка javascript). Я перепробовал все решения, упомянутые здесь.
Мой код в room.html
Этот код предназначен для группового чата
{% block content %}
<br><br>
{% include 'message.html' %}
<div class="container mb-5" style="max-width: 600px;">
<form>
<div>
<label class="h4 pt-5">Public Chatroom</label>
<div class=" border border-primary border-2" placeholder="Chat Screen" id="chat-text" style=" height: 400px; overflow-y: scroll;">
{% if group_messages %}
{% for group_message in group_messages %}
{% if group_message.username == user.username %}
{% if 'base64' in group_message.content %}
<div id="sent" class="text-end my-2">
{% include 'image_display.html' %}
</div>
{% else %}
<div id="sent" class="text-end my-2">
{% include 'text_display.html' %}
</div>
{% endif %}
{% else %}
{% if 'base64' in group_message.content %}
<div id="replies" class="my-2">
{% include 'image_display.html' %}
</div>
{% else %}
{% include 'text_display.html' %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
</div><br>
</div>
<div class="form-group">
<input class="form-control" id="input" type="text" placeholder="Type Here"></br>
</div>
<input class="btn btn-outline-secondary container" id="submit" type="button" value="Send"> <br>
<a href="#" class="mt-2 btn btn-primary container" onclick="ChooseImage()"> Send Image<input id="imageFile" accept="image/*" style="display: none;" onchange="SendImage(this);" type="file" ></a> <br>
<small class="mt-2">Your username: {{ user.username }}</small>
</form>
<br>
</div>
{{ request.user.username|json_script:"user_username" }}
<script>
var group_message = "{{group_message}}";
const user_username = JSON.parse(document.getElementById('user_username').textContent);
document.querySelector('#submit').onclick = function (e) {
const message = document.getElementById('input').value;
chatSocket.send(JSON.stringify({
'message': message,
'username': user_username,
}));
document.getElementById('input').value = "";
}
function ChooseImage() {
document.getElementById('imageFile').click();
}
function SendImage(event) {
var file = event.files[0];
if (!file.type.match("image.*")){
alert("Please select image only.");
}
else {
var reader = new FileReader();
reader.addEventListener("load", function () {
chatSocket.send(JSON.stringify({
'message': reader.result,
'username': user_username,
}));
}, false);
if (file) {
var images12 = reader.readAsDataURL(file);
}
}
}
const url = 'ws://localhost:8000/ws/chat/';
const chatSocket = new WebSocket(url);
chatSocket.onmessage = function (e) {
const data = JSON.parse(e.data);
var message = data['message'];
var sender = data['username'];
var today = new Date();
var time = today.getHours() ":" today.getMinutes();
if (message.indexOf("base64") != -1){
var message = `<img src="${message}" style="height: 100px; width: 100px;" class="my-2" />`;
}else{
var message = message
}
if (sender == user_username){
document.getElementById('chat-text').innerHTML ='<br>' '<div class = "float-end mx-2 my-2">' sender ': ' message ', Sent at ' time ' ' '<button class = "btn btn-outline-danger btn-sm rounded-circle" style="height:20px; width: 20px;">' 'amp;#215;' '</button>' '<br>' ' </div>' '<br>';
} else {
document.getElementById('chat-text').innerHTML ='<br>' '<div class = "mx-2">' sender ': ' message ', Sent at ' time ' ' '<button class = "btn btn-outline-danger btn-sm rounded-circle" style="height:20px, width: 20px;">' 'amp;#215;' '</button>' '<br>' ' </div>' '<br>';
}
}
</script>
{% endblock content %}
Код в text_display.html
amp;nbsp;amp;nbsp;{{group_message.username}}: {{group_message.content}}, amp;nbsp;Sent at {{group_message.created_at|time:"H:i"}}<a href="{% url 'group_chat_delete' group_message.id %}" role="button" class="mx-3 btn btn-outline-danger btn-sm rounded-circle" style="height: 20px; width: 20px;">amp;#215;</a> <br>
Код в image_display.html
amp;nbsp;amp;nbsp;{{group_message.username}}: <img src="{{group_message.content}}" alt="Image" style="width: 100px; height: 100px;">, amp;nbsp;Sent at {{group_message.created_at|time:"H:i"}}<a href="{% url 'group_chat_delete' group_message.id %}" role="button" class="mx-3 btn btn-outline-danger btn-sm rounded-circle" style="height: 20px; width: 20px;">amp;#215;</a> <br>
Код от views.py файл:
class GroupChatDeleteView(DeleteView):
"""View to delete a task in group chat."""
model = GroupMessage
raise_exception = True
context_object_name = 'group_message'
success_message = 'Chat successfully deleted!'
success_url = reverse_lazy('room')
template_name = 'group_chat_del.html'
pk_url_kwarg = 'msg_id'
def delete(self, request, *args, **kwargs):
"""Override delete method to allow success message to be added."""
messages.success(self.request, self.success_message)
return super().delete(request, *args, **kwargs)
Я хочу добавить этот код тега привязки `href=»{% url ‘group_chat_delete’ group_message.id %}` в блоке » если (отправитель == имя пользователя)` (javascript).
Пожалуйста, помогите мне сделать это. Мы очень ценим любую помощь.