Python Django评论系统
我正在为我的帖子制作一个回复/评论系统。下面是models.py的外观: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
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 © 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')