Python Django评论系统

Python Django评论系统,python,django,django-models,django-templates,django-views,Python,Django,Django Models,Django Templates,Django Views,我正在为我的帖子制作一个回复/评论系统。下面是models.py的外观: from django.conf import settings from django.core.urlresolvers import reverse from django.db import models from django.utils import timezone import misaka from groups.models import Group from django.contrib.au

我正在为我的帖子制作一个回复/评论系统。下面是models.py的外观:

from django.conf import settings
from django.core.urlresolvers import reverse
from django.db import models
from django.utils import timezone

import misaka

from groups.models import  Group

from django.contrib.auth import get_user_model
User = get_user_model()


class Post(models.Model):
    user = models.ForeignKey(User, related_name="posts")
    created_at = models.DateTimeField(auto_now=True)
    message = models.TextField()
    message_html = models.TextField(editable=False)
    group = models.ForeignKey(Group, related_name="posts",null=True, blank=True)

    def __str__(self):
        return self.message

    def save(self, *args, **kwargs):
        self.message_html = misaka.html(self.message)
        super().save(*args, **kwargs)


    def get_absolute_url(self):
        return reverse(
            "posts:single",
            kwargs={
                "username": self.user.username,
                "pk": self.pk
            }
        )

    class Meta:
        ordering = ["-created_at"]
        unique_together = ["user", "message"]



class Answer(models.Model):
    post = models.ForeignKey('posts.Post', related_name='posts')
    author = models.ForeignKey(User, related_name='answers')
    answer = models.TextField()
    create_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def __str__(self):
        return self.answer



    def get_absolute_url(self):
        return reverse('post_detail', kwargs={
                        "username": self.user.username,
                        "pk": self.pk,
})
我遇到了一个问题,基本上是在帖子的细节中显示答案/评论。以下是我的帖子细节:

<!DOCTYPE html>
{%load staticfiles%}
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="keywords" content="footer, address, phone, icons" />
    <link href="https://fonts.googleapis.com/css?family=Abel|Raleway|Signika|Signika+Negative" rel="stylesheet">
    <title>Ask Uptown</title>
    <style media="screen">


    .logo-text span{
      color: #5383d3;
    }


    .backgr{
      background-color: #7F7F7F;
      height: 13vh;
      width: 100%;
      background-size: cover;
      background-position: center;
    }



    header{
      background: src(.backgr);
    }

  .no-ans{
    position: relative;
    top: 50px;
    left: 50px;
    font-size: 20px;
  }

.add-comment{
  position: relative;
  text-decoration: none;
  z-index: 99;
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 300px;
  height: 40px;
  background: linear-gradient(45deg, #B388EB, #8093F1);
  border-radius: 20px;
  color: #FFF;
  font-size: 20px;
  letter-spacing: 1px;
  font-weight: 200;
  left: 1100px;
  text-decoration: none;
  left: 800px;
  top: 75px;
}
    </style>
  </head>
  <body>

<header>

<div class="backgr">
    <nav class="" role="navigation" id="navbar">
          <div class="">
            <div class="logo">
              <a class="logo-text" href="{% url 'home' %}"><h3>Uptown<span>Ask</h3></span></a>
          </div>


              <ul class="main-nav">
                {% if user.is_authenticated %}
                      <li class="active"><a href="{% url 'home' %}">Home</a></li>
                      <li><a href="{% url 'posts:create' %}">Stuck? Ask A question</a></li>
                      <li><a href="{% url 'groups:all' %}">Groups</a></li>
                      <li><a href="#">Contact</a></li>
                      <li><a href="{% url 'accounts:logout' %}">Log out</a></li>
                {% else %}
                      <li class="active"><a href="{% url 'home' %}">Home</a></li>
                      <li><a href="{% url 'groups:all' %}">Groups</a></li>
                      <li><a href="{% url 'accounts:login' %}" >Log in</a></li>
                      <li><a href="{% url 'accounts:signup' %}" >Sign up</a></li>
                      <li><a href="#">Contact</a></li>
                {% endif %}
              </ul>

          </header>

          <section>

            {% block post_content %}
            <div class="col-md-8">
                {% include "posts/_post.html" %}
            </div>
            {% endblock %}

              <a class="add-comment" href="{% url 'posts:add_comment_to_post' pk=post.pk%}">Answer This Question</a>

            {% for comment in post.comments.all %}
            <br>
                {% if user.is_authenticated %}

                        {{ comment.created_date }}
                        {% if not comment.approved_comment %}
                            <a class="btn btn-default" href="{% url 'comment_remove' pk=comment.pk %}"><span class="glyphicon glyphicon-remove"></span></a>
                            <a class="btn btn-default" href="{% url 'comment_approve' pk=comment.pk %}"><span class="glyphicon glyphicon-ok"></span></a>
                        {% endif %}

                    <p>{{ comment.text|safe|linebreaks }}</p>
                    <p>Posted by: <strong>{{ comment.author }}</strong></p>

                {% endif %}
            {% empty %}
                <p class="no-ans">No Answer's posted.</p>
            {% endfor %}
          </div>


          </section>


    <footer class="footer-distributed">

    <div class="footer-left">

    <h3>Uptown<span>Ask</span></h3>

    <p class="footer-links">
    <a href="#">Home</a>
    ·
    <a href="#">Blog</a>
    ·
    <a href="#">About</a>
    ·
    <a href="#">Contact</a>
    </p>

    <p class="footer-company-name">Ask Uptown &copy; 2017</p>
    </div>

    <div class="footer-center">

    <div class="adress-sec">
    <p class="p-adress">Address: Tripoli Street, Algeria Road, Mirdif Area - Dubai, United Arab Emirtes</p>
    </div>

    <div class="phone-sec">
    <p>Phone: 04 251 5001</p>
    </div>

    <div class="email-sec">
    <p class="p-email"><a href="mailto:rayanza3eem1234@gmail.com">Email: Uptownschool@gmail.com</a></p>
    </div>

    </div>

    <div class="footer-right">

    <p class="footer-company-about">
    <span>About the company</span>
    Lorem ipsum dolor sit amet, consectateur adispicing elit. Fusce euismod convallis velit, eu auctor lacus vehicula sit amet.
    </p>

    <div class="icons">

    <a href="https://www.twitter.com" target="_blank"><img src="images/twitter.png" alt="Twitter" class="twitter" ></a>
    <a href="https://www.facebook.com" target="_blank"><img src="facebook.png" alt="Facebook" class="facebook" ></a>
    <a href="https://www.instagram.com" target="_blank"><img src="insta.png" alt="Instagram" class="instagram" ></a>

    </div>

    </div>

    </footer>
  </body>
</html>
基于comment_remove函数的视图供用户删除其注释/答案。add_comment_to_post是发布评论/答案的类

from django.conf.urls import url

from . import views

app_name='posts'

urlpatterns = [
    url(r"^$", views.PostList.as_view(), name="all"),
    url(r"new/$", views.CreatePost.as_view(), name="create"),
    url(r"by/(?P<username>[-\w]+)/$",views.UserPosts.as_view(),name="for_user"),
    url(r"by/(?P<username>[-\w]+)/(?P<pk>\d+)/$",views.PostDetail.as_view(),name="single"),
    url(r"delete/(?P<pk>\d+)/$",views.DeletePost.as_view(),name="delete"),
    url(r'^post/(?P<pk>\d+)/comment/$', views.add_comment_to_post, name='add_comment_to_post'),
    url(r'^comment/(?P<pk>\d+)/remove/$', views.comment_remove, name='comment_remove'),
]
从django.conf.url导入url
从…起导入视图
app_name='posts'
URL模式=[
url(r“^$”,views.PostList.as_view(),name=“all”),
url(r“new/$”,views.CreatePost.as_view(),name=“create”),
url(r“by/(?P[-\w]+)/$”,views.UserPosts.as_view(),name=“for_user”),
url(r“by/(?P[-\w]+)/(?P\d+)/$”,views.postdail.as_view(),name=“single”),
url(r“delete/(?P\d+)/$”,views.DeletePost.as_view(),name=“delete”),
url(r“^post/(?P\d+)/comment/$”,views.add_comment_to_post,name='add_comment_to_post'),
url(r'^comment/(?P\d+)/remove/$,views.comment\u remove,name='comment\u remove'),
]
我似乎找不到一种方式来显示帖子细节下的评论,如果你是django天才,请提供帮助。

更改:

post = models.ForeignKey('posts.Post', related_name='posts')

这样模板的“post.comments.all”就可以工作了

post = models.ForeignKey('posts.Post', related_name='posts')
post = models.ForeignKey('posts.Post', related_name='comments')