Browse Source

Допиливание коментов

master
Дмитрий 3 years ago
parent
commit
cc27292dd3
  1. 1
      blog/blog/urls.py
  2. 1
      blog/comments/eyerest/Main
  3. 6
      blog/comments/models.py
  4. 7
      blog/comments/urls.py
  5. 40
      blog/comments/views.py
  6. 45
      blog/posts/templates/posts/post.html

1
blog/blog/urls.py

@ -19,5 +19,6 @@ from django.urls import path, include
urlpatterns = [ urlpatterns = [
path("", include("mainpage.urls")), path("", include("mainpage.urls")),
path("posts/", include("posts.urls")), path("posts/", include("posts.urls")),
path("comments/", include("comments.urls")),
path("admin/", admin.site.urls), path("admin/", admin.site.urls),
] ]

1
blog/comments/eyerest/Main

File diff suppressed because one or more lines are too long

6
blog/comments/models.py

@ -1,5 +1,7 @@
from django.db import models from django.db import models
from posts.models import Post from posts.models import Post
from datetime import datetime
from django.utils import timezone
class Comment(models.Model): class Comment(models.Model):
@ -8,9 +10,9 @@ class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE) post = models.ForeignKey(Post, on_delete=models.CASCADE)
author_name = models.CharField("имя автора", max_length=60) author_name = models.CharField("имя автора", max_length=60)
author_secret = models.CharField("секретная строка", max_length=128, blank=True) author_secret = models.CharField("секретная строка", max_length=128, blank=True)
reply = models.IntegerField(null=True) reply = models.ForeignKey("self", on_delete=models.SET_NULL, blank=True, null=True)
comment_text = models.TextField() comment_text = models.TextField()
date = models.DateTimeField() date = models.DateTimeField(default=timezone.now)
class CommentAuthor(models.Model): class CommentAuthor(models.Model):

7
blog/comments/urls.py

@ -0,0 +1,7 @@
from django.urls import path
from . import views
app_name = "comments"
urlpatterns = [
path("<int:post_id>/leave_comment", views.leave_comment, name="leave_comment"),
]

40
blog/comments/views.py

@ -1,3 +1,39 @@
from django.shortcuts import render from django.shortcuts import render, reverse
from posts.models import Post
from django.http import Http404, HttpResponseRedirect
from .models import Comment
from datetime import datetime
from django.core.exceptions import ObjectDoesNotExist
# Create your views here.
def leave_comment(request, post_id):
parent: Comment
try:
post = Post.objects.get(id=post_id)
except ObjectDoesNotExist:
raise Http404("Пост не найден")
# сделать проверку более вменяемой
parent_id = request.POST["reply_to"]
if parent_id == "":
parent = None
else:
try:
parent = Comment.objects.get(id=parent_id)
# если комментарий, на который отвечает пользователь не к
# этой статье, то игнорируем поле ответа
if not parent in post.comment_set.all():
parent = None
except ObjectDoesNotExist:
parent = None
post.comment_set.create(
author_name=request.POST["name"],
comment_text=request.POST["text"],
reply=parent,
)
return HttpResponseRedirect(reverse("posts:detail", args=(post.id,)))

45
blog/posts/templates/posts/post.html

@ -20,10 +20,47 @@
<br> <br>
<p>Комменты</p> <p>Комменты</p>
{% for comment in comments %} {% for comment in comments %}
<p>{{ comment.author_name }}</p>
<p>{{ comment.comment_text }}</p> <div class="box">
<br> {% if comment.reply %}
{% endfor %}
<p>[{{comment.id}}] <strong>{{ comment.author_name }}</strong> отвечает {{ comment.reply.author_name }}:</p>
<div class="content">
<blockquote>{{ comment.reply.comment_text }}</blockquote>
{% else %}
<p>[{{comment.id}}] <strong>{{ comment.author_name }}</strong> говорит:</p>
<div class="content">
{% endif %}
<p>{{ comment.comment_text }}</p>
</div>
<a href="javascript:reply()">Ответить</a>
</div>
{% endfor %}
<form action="{% url 'comments:leave_comment' post.id %}" method="POST">
{% csrf_token %}
<div class="field">
<label class="label">Имя</label>
<input class="input" type="text" requiered placeholder="Имярек" name="name">
</div>
<div class="field">
<label class="label">Секрет</label>
<input class="input" type="text" requiered placeholder="пока что тут поле ответа" name="reply_to">
</div>
</div>
<div class="field">
<label class="label">Комментарий</label>
<div class="control">
<textarea class="textarea" name='text' requiered placeholder="Текст"></textarea>
</div>
</div>
<div class="control">
<button class="button is-primary" type="submit">Оставить комментарий</button>
</div>
</form>
</section> </section>
{% endautoescape %} {% endautoescape %}

Loading…
Cancel
Save