Add form Comments
This commit is contained in:
parent
29c315501b
commit
3229d7f255
@ -27,8 +27,26 @@ class BlogConsumer(WebsocketConsumer):
|
|||||||
data['pag'] = pag
|
data['pag'] = pag
|
||||||
|
|
||||||
if template == "partials/blog/single.html":
|
if template == "partials/blog/single.html":
|
||||||
|
# Set data
|
||||||
data["post"] = Post.objects.get(pk=data['id'])
|
data["post"] = Post.objects.get(pk=data['id'])
|
||||||
data["comments"] = Comment.objects.filter(post__id=data['id']).all()
|
data["comments"] = Comment.objects.filter(post__id=data['id']).order_by("-created_on").all()
|
||||||
|
# Add new comment
|
||||||
|
data["newName"] = data['newName'] if 'newName' in data else ''
|
||||||
|
data["newMessage"] = data['newMessage'] if 'newMessage' in data else ''
|
||||||
|
newComment = 'newComment' in data
|
||||||
|
# Validation
|
||||||
|
error = (len(data["newName"]) == 0 or len(data["newMessage"]) == 0) and newComment
|
||||||
|
data["error"] = error
|
||||||
|
if newComment and not error:
|
||||||
|
# Insert
|
||||||
|
Comment(
|
||||||
|
name=data["newName"],
|
||||||
|
body=data["newMessage"],
|
||||||
|
post=Post.objects.get(pk=data['id'])
|
||||||
|
).save()
|
||||||
|
# Clean form
|
||||||
|
data["newName"] = ''
|
||||||
|
data["newMessage"] = ''
|
||||||
|
|
||||||
# Send message to WebSocket
|
# Send message to WebSocket
|
||||||
self.send(
|
self.send(
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
document.$CHAT_SOCKET = new WebSocket('ws://my-demo.localhost/ws/blog/{{ CHANNEL}}/');
|
document.$CHAT_SOCKET = new WebSocket('ws://{{ DOMAIN }}/ws/blog/{{ CHANNEL}}/');
|
||||||
|
|
||||||
document.$CHAT_SOCKET.addEventListener('open', () => {
|
document.$CHAT_SOCKET.addEventListener('open', () => {
|
||||||
console.log('Connect');
|
console.log('Connect');
|
||||||
|
@ -7,8 +7,29 @@
|
|||||||
<section id="comments">
|
<section id="comments">
|
||||||
<hr>
|
<hr>
|
||||||
<h3>Comments</h3>
|
<h3>Comments</h3>
|
||||||
|
{# Form add comment #}
|
||||||
|
<form>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="new-name">Name</label>
|
||||||
|
<input class="form-input" type="text" id="new-name" placeholder="Name" value="{{ newName }}">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="new-message">Message</label>
|
||||||
|
<textarea class="form-input" id="new-message" placeholder="New message" rows="3">{{ newMessage }}</textarea>
|
||||||
|
</div>
|
||||||
|
<button data-id="{{ post.id }}" id="publish" class="btn">Publish</button>
|
||||||
|
{% if error %}
|
||||||
|
<div class="toast toast-error">
|
||||||
|
Fill in all fields
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</form>
|
||||||
|
<hr>
|
||||||
|
{# End Form add comment #}
|
||||||
|
|
||||||
|
{# All comment #}
|
||||||
{% for comment in comments %}
|
{% for comment in comments %}
|
||||||
<div class="tile">
|
<article class="tile">
|
||||||
<div class="tile-icon">
|
<div class="tile-icon">
|
||||||
<i class="icon icon-file centered"></i>
|
<i class="icon icon-file centered"></i>
|
||||||
</div>
|
</div>
|
||||||
@ -16,8 +37,33 @@
|
|||||||
<p class="tile-title">{{ comment.name }}</p>
|
<p class="tile-title">{{ comment.name }}</p>
|
||||||
<p class="tile-subtitle">{{ comment.body }}</p>
|
<p class="tile-subtitle">{{ comment.body }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</article>
|
||||||
<hr>
|
<hr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{# End All comment #}
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Open article
|
||||||
|
newName = document.querySelector('#new-name');
|
||||||
|
newMessage = document.querySelector('#new-message');
|
||||||
|
publish = document.querySelector('#publish');
|
||||||
|
|
||||||
|
publish.addEventListener('click', (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
document.$CHAT_SOCKET.send(JSON.stringify({
|
||||||
|
selector: "#main",
|
||||||
|
template: "partials/blog/single.html",
|
||||||
|
data: {
|
||||||
|
id: event.target.dataset.id,
|
||||||
|
newName: newName.value,
|
||||||
|
newMessage: newMessage.value,
|
||||||
|
newComment: true
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from django.conf import settings
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from apps.back.models import Post
|
from apps.back.models import Post
|
||||||
import uuid
|
import uuid
|
||||||
@ -6,5 +7,6 @@ def all_articles(request):
|
|||||||
return render(request, 'layouts/main.html', {
|
return render(request, 'layouts/main.html', {
|
||||||
"CHANNEL": uuid.uuid4().hex[:20].upper(),
|
"CHANNEL": uuid.uuid4().hex[:20].upper(),
|
||||||
"posts": Post.objects.all()[:3],
|
"posts": Post.objects.all()[:3],
|
||||||
"pag": 1
|
"pag": 1,
|
||||||
|
"DOMAIN": settings.DOMAIN
|
||||||
})
|
})
|
||||||
|
@ -15,6 +15,8 @@ from pathlib import Path
|
|||||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||||
|
|
||||||
|
DOMAIN = os.environ.get("DOMAIN", "localhost")
|
||||||
|
|
||||||
|
|
||||||
# Quick-start development settings - unsuitable for production
|
# Quick-start development settings - unsuitable for production
|
||||||
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
|
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
|
||||||
|
Loading…
Reference in New Issue
Block a user