普通评论
从Article中查找普通评论
M
from django.db import models
# Create your models here.
class People(models.Model):
name = models.CharField(null=True, blank=True,max_length=200)
job = models.CharField(null=True, blank=True, max_length=200)
def __str__(self):
return self.name
class Article(models.Model):
headline = models.CharField(null=True, blank=True,max_length=500)#新增
content = models.TextField(null=True, blank=True)#新增
TAG_CHOICES = (
('tech', 'Tech'),
('life','Life'),
)
tag = models.CharField(null=True, blank=True, max_length=5, choices=TAG_CHOICES)
def __str__(self):
return self.headline
class Comment(models.Model):
name = models.CharField(null=True, blank=True, max_length=50)
comment = models.TextField()
belong_to = models.ForeignKey(to=Article, related_name='under_comments', null=True, blank=True)
#归属=模型.外键(归属于Article,从外部查询叫under_comments,没有是True,空格是True)【article.unser_comment.all】
def __str__(self):
return self.comment
Django后台不显示创建的模型的解决办法
在admin.py中注册模型
from django.contrib import admin
from firstapp.models import People, Article, Comment
# Register your models here.
admin.site.register(People)
admin.site.register(Article)
admin.site.register(Comment)
MM
python manage.py makemigrations
python manage.py migrate
评论归属在文章下【后台管理页面操作】
V
from django.shortcuts import render, HttpResponse, redirect
from firstapp.models import Article, Comment
from django.template import Context, Template
from firstapp.form import CommentForm
# Create your views here.
def index(request):
print(request)
print('==='*30)
print(dir(request))
print('==='*30)
print(type(request))
queryset = request.GET.get('tag')
if queryset:
article_list = Aritcle.objects.filter(tag=queryset)
else:
article_list = Article.objects.all()
context = {}
context['article_list'] = article_list
index_page = render(request, 'first_web_2.html', context)
return index_page
def detail(request, page_num):
if request.method == 'GET':
form = CommentForm
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
comment = form.cleaned_data['comment']
a = Article.objects.get(id=page_num)
#实例化id=page_num的文章
c = Comment(name=name, comment=comment, belong_to=a)
#实例化评论(归属于文章a)
c.save()
return redirect(to='detail', page_num=page_num)
#重定向到page_num页的文章
context = {}
#comment_list = Comment.objects.all()#不需要
article = Article.objects.get(id=page_num)
context['article'] = article
#context['comment_list'] = comment_list#不需要
context['form'] = form
return render(request, 'article_detail.html', context)
T
从实例化article中查找comment(对外叫under_comments)
{% for comment in article.under_comments.all %}
<!DOCTYPE html>
{% load staticfiles %}
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'css/semantic.css' %}" media="screen" title="no title" charset="utf-8">
<link href="https://fonts.googleapis.com/css?family=0swald|Raleway" rel="stylesheet">
<style type="text/css">
.ui.segment.container{
width:700px;
}
p {
font-family:'Raleway', sans-serif;
font-size:18px;
}
body {
background: url({% static 'images/star_banner.jpg' %});
background-size:cover;
background-repeat:no-repeat;
background-attachment:fixed
}
</style>
</head>
<body>
<div class="ui image">
<img src="" alt="" />
</div>
<div class="ui segment padded container">
<h1 class="ui header" style="font-family:'Oswald',sans-serif;font-size: 40px">
{{ article.headline }}
</h1>
<p>
{{ article.content }}
</p>
</div>
<div class="ui segment container" style="width:700px;">
<h3 class="ui header" style="font-family: 'Oswald', sans-serif;">Comments</h3><!--标题Comment-->
<div class="ui comments"><!--评论-->
{% for comment in article.under_comments.all %}
<div class="comment">
<div class="avatar">
<img src="http://semantic-ui.com/images/avatar/small/matt.jpg" alt="" />
</div>
<div class="content">
<a href="#" class="author">{{ comment.name }}</a>
<div class="metadata">
<div class="date">2 days ago</div>
</div>
<p class="text" style="font-family:'Raleway', sans-serif;">
{{ comment.comment }}
</p>
</div>
</div>
{% endfor %}
</div>
<div class="ui divider"></div><!--分割线评论-->
<form class="ui error tiny form" method="post">
{% if form.errors %}
<div class="ui error message">
{{ form.errors }}
</div>
{% for field in form %}
<div class="{{ field.errors|yesno:'error, '}} field"><!--#依次判断表格中的field是否有error-->
{{ field.label }}
{{ field }}
</div>
{% endfor %}
{% else %}
{% for field in form %}
<div class="field">
{{ field.label }}
{{ field }}
</div>
{% endfor %}
{% endif %}
{% csrf_token %}<!--Django防跨站"{%csrf_token%}"标签-->
<button type="submit" class="ui blue button">Click</button>
</form>
</div>
</body>
</html>
优秀评论
M
from django.db import models
# Create your models here.
class People(models.Model):
name = models.CharField(null=True, blank=True,max_length=200)
job = models.CharField(null=True, blank=True, max_length=200)
def __str__(self):
return self.name
class Article(models.Model):
headline = models.CharField(null=True, blank=True,max_length=500)#新增
content = models.TextField(null=True, blank=True)#新增
TAG_CHOICES = (
('tech', 'Tech'),
('life','Life'),
)
tag = models.CharField(null=True, blank=True, max_length=5, choices=TAG_CHOICES)
def __str__(self):
return self.headline
class Comment(models.Model):
name = models.CharField(null=True, blank=True, max_length=50)
comment = models.TextField()
belong_to = models.ForeignKey(to=Article, related_name='under_comments', null=True, blank=True)
best_comment = models.BooleanField(default=False)
#默认都不是最优评论,最优评论需手动选择
def __str__(self):
return self.comment
MM
python manage.py makemigrations
python manage.py migrate
后台管理最优评论
V
from django.shortcuts import render, HttpResponse, redirect
from firstapp.models import Article, Comment
from django.template import Context, Template
from firstapp.form import CommentForm
# Create your views here.
def index(request):
print(request)
print('==='*30)
print(dir(request))
print('==='*30)
print(type(request))
queryset = request.GET.get('tag')
if queryset:
article_list = Aritcle.objects.filter(tag=queryset)
else:
article_list = Article.objects.all()
context = {}
context['article_list'] = article_list
index_page = render(request, 'first_web_2.html', context)
return index_page
def detail(request, page_num):
if request.method == 'GET':
form = CommentForm
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
comment = form.cleaned_data['comment']
a = Article.objects.get(id=page_num)
c = Comment(name=name, comment=comment, belong_to=a)
c.save()
return redirect(to='detail', page_num=page_num)
context = {}
#comment_list = Comment.objects.all()
article = Article.objects.get(id=page_num)
#实例化指定页面的article
best_comment = Comment.objects.filter(best_comment=True, belong_to=article)
#在评论中筛选评论属性best_comment为True,从属于article的的评论
#best_comment=models.BooleanField(default=True)【勾选为best_comment的评论】<=============等价于============>best_comment=True
context['article'] = article
#context['comment_list'] = comment_list
context['form'] = form
if best_comment:
context['best_comment'] = best_comment[0]
#如果有best_comment,则挑选第一个best_comment
return render(request, 'article_detail.html', context)
T
<!DOCTYPE html>
{% load staticfiles %}
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'css/semantic.css' %}" media="screen" title="no title" charset="utf-8">
<link href="https://fonts.googleapis.com/css?family=0swald|Raleway" rel="stylesheet">
<style type="text/css">
.ui.segment.container{
width:700px;
}
p {
font-family:'Raleway', sans-serif;
font-size:18px;
}
body {
background: url({% static 'images/star_banner.jpg' %});
background-size:cover;
background-repeat:no-repeat;
background-attachment:fixed
}
</style>
</head>
<body>
<div class="ui image">
<img src="" alt="" />
</div>
<div class="ui segment padded container">
<h1 class="ui header" style="font-family:'Oswald',sans-serif;font-size: 40px">
{{ article.headline }}
</h1>
<p>
{{ article.content }}
</p>
</div>
<div class="ui segment container" style="width:700px;">
<h3 class="ui header" style="font-family: 'Oswald', sans-serif;">Comments</h3><!--标题Comment-->
<div class="ui comments"><!--评论-->
{% if best_comment %}
<div class="ui mini red left ribbon label">
<i class="icon fire"></i>
BEST
</div>
<div class="best comment">
<div class="avatar">
<img src="http://semantic-ui.com/images/avatar/small/matt.jpg " alt="" />
</div>
<div class="content">
<a href="#" class="author">{{ best_comment.name }}</a>
<div class="metadata">
<div class="date">2 days ago</div>
</div>
<p class="text" style="font-family: 'Raleway', sans-serif;">
{{ best_comment.comment }}
</p>
</div>
</div>
{% endif %}
{% for comment in article.under_comments.all %}
<div class="comment">
<div class="avatar">
<img src="http://semantic-ui.com/images/avatar/small/matt.jpg" alt="" />
</div>
<div class="content">
<a href="#" class="author">{{ comment.name }}</a>
<div class="metadata">
<div class="date">2 days ago</div>
</div>
<p class="text" style="font-family:'Raleway', sans-serif;">
{{ comment.comment }}
</p>
</div>
</div>
{% endfor %}
</div>
<div class="ui divider"></div><!--分割线评论-->
<form class="ui error tiny form" method="post">
{% if form.errors %}
<div class="ui error message">
{{ form.errors }}
</div>
{% for field in form %}
<div class="{{ field.errors|yesno:'error, '}} field"><!--#依次判断表格中的field是否有error-->
{{ field.label }}
{{ field }}
</div>
{% endfor %}
{% else %}
{% for field in form %}
<div class="field">
{{ field.label }}
{{ field }}
</div>
{% endfor %}
{% endif %}
{% csrf_token %}<!--Django防跨站"{%csrf_token%}"标签-->
<button type="submit" class="ui blue button">Click</button>
</form>
</div>
</body>
</html>