评论

1、创建一个评论的app, comment

    python manage.py startapp comment

2、创建数据模型,在models.py中:

    class Comment(models.Model):

        name = models.CharField(max_length=20, verbose_name='姓名')

        email = models.EmailField(verbose_name='邮箱')

        url = models.UrlField(verbose_name='网址')

        content = models.TextField(verbose_name='内容')

        created_date = models.DateTimeField(auto_now_add = Ture)

        post = models.ForeignKey('blog.Post')

        def __str__(self):

            return self.content[:20]

3、迁移数据库:

    python manage.py makemigrations

    python manage.py migrate

4、前端页面post_detail.html:

<h3>发表评论</h3>

<form action="{% url 'comment:get_comment' post.id %}" method="post" class="comment-form">
    {% csrf_token %}
    <div class="row">
        <div class="col-md-4">
            <label for="{{ forms.name.id_for_label }}">名字:</label>
            {{ forms.name }}
            {{ forms.name.errors }}
        </div>
        <div class="col-md-4">
            <label for="{{ forms.email.id_for_label }}">邮箱:</label>
            {{ forms.email }}
            {{ forms.email.errors }}
        </div>
        <div class="col-md-4">
            <label for="{{ forms.url.id_for_label }}">网址:</label>
            {{ forms.url }}
            {{ forms.url.errors }}
        </div>
        <div class="col-md-12">
            <label for="id_comment">评论:</label>
            {{ forms.content }}
            {{ forms.content.errors }}
            <button type="submit" class="comment-btn">发表</button>
        </div>
    </div>    <!-- row -->
</form>

form表单:

class commentModelForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ['name', 'email', 'url', 'content']

comment/urls.py中:

urlpatterns = [
    url(r'^get_comment/(?P<id>\d+)/$', get_comment, name='get_comment'),
]

comment/views:

def get_comment(request, id):
    post = get_object_or_404(Post, id=id)
    print('***********',post.get_absolute_url())
    if request.method == 'POST':
        form = commentModelForm(request.POST)
        if form.is_valid():
            comments = form.save(commit=False)
            comments.post = post
            comments.save()
        else:
            context = {
                'post': post,
                'form': form,
                'comment_list': post.comment_set.all()
            }
            return render(request, 'blog/post_detail.html', context)
        """
        * A model: the model's `get_absolute_url()` function will be called.
        * A view name, possibly with arguments: `urls.reverse()` will be used
          to reverse-resolve the name.
        * A URL, which will be used as-is for the redirect location.
        """
    return redirect(post)

在post/models.py中:

# 得到绝对路径的url

def get_absolute_url(self):
    return reverse('blog:post_detail', kwargs={'pk': self.id})

在post/views.py:

def post_detail(request, pk):
    post = get_object_or_404(Post, id=pk)
    post.content = markdown.markdown(post.content,
                                     extensions=[
                                         'markdown.extensions.extra',
                                         'markdown.extensions.codehilite',
                                         'markdown.extensions.toc', ])
    forms = commentModelForm()
    comment_list = post.comment_set.all()
    post.creates_views()
    return render(request, 'blog/post_detail.html', {'post': post, 'forms': forms, 'comment_list': comment_list})

在前端页面post_detail:    

<div class="comment-list-panel">
    <h3>评论列表,共 <span>{{ post.comment_set.count }}</span> 条评论</h3>
    <ul class="comment-list list-unstyled">
        {% for comment in comment_list %}
            <li class="comment-item">
                <span class="nickname">{{ comment.name }}</span>
                <time class="submit-date">{{ comment.create_time }}</time>
                <div class="text">
                    {{ comment.content }}
                </div>
            </li>
        {% empty %}
            暂无评论
        {% endfor %}
    </ul>
</div>

猜你喜欢

转载自blog.csdn.net/yx1179109710/article/details/81416409