让评论指定为某文章评论

普通评论

从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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值