django 博客评论

  • god
  • 155 次点击

没有用类视图,用的是最基本的,请问如何将评论方框显示在当前文章,实现的是只有一个评论按钮,点了之后才显示具体评论字段 先贴部分代码

views.py
def comment(request):
    if request.method=='POST':
        form = CommentForm(request.POST)
        if form.is_valid():  
            comments = BlogComment()   
            comments.user_name = form.cleaned_data['user_name']
            comments.email = form.cleaned_data['user_email']
            comments.body = form.cleaned_data['body']
            comments.save()
        else:
            form = CommentForm()


    my_context = {
            'form':form,
            'comments':BlogComment.objects.all()
        }

    return render_to_response('comment.html', my_context)
form.py
class CommentForm(forms.Form):
    user_name = forms.CharField(label='昵称', required=True, max_length=100)
    user_email = forms.EmailField(label='邮箱', required=True, max_length=255)
    body = forms.CharField(label='评论内容', required=True, widget=forms.Textarea)
    created_time = forms.DateTimeField(label='评论发表时间', )
url.py
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^article/(?P<article_id>\d+)$', views.detail, name='detail'),
    url(r'^article/comment/$',views.comment, name='comment'),
]
```python
detail,html
{% extends 'base.html' %}
{% block content %}
{{ title }}
{{ created }}
{{ body }}
{% include 'comment.html' %}
{% endblock %}
comment.html
<form method="post" action="{% url 'blog:comment' %}">
{% csrf_token %}
{% for field in form %}
<div>
{{field.label_tag}}{{ field }}
{{ field.errors }}
</div>
{% endfor %}
<div>
<input type="submit" value="comment">
</div>
</form>
{% for comment in comments %}
<div>
{{ comment.user_name }}
{{ comment.body }}
{{ comment.created_time }}
</div>
{% endfor %}

最后显示 点击comment之后 我需要第二张图片显示的界面显示在第一张图片里 谢谢!

  • 16 回复 | 直到 2016年12月23日 10:59
  • 你的意思是说一开始只有一个评论按钮,点击之后弹出评论框么?这必须借助 js,初始设置评论框为 display=none,然后当用户点击按钮后设置 display=block。

    • god
    • 2 楼

    @追梦人物 对的 有参考代码

    • god
    • 3 楼

    @god @追梦人物 有参考的代码吗 对js不熟 谢谢

  • 大概思路这样

    $('id_comment_panel').on('click', function(){
        $(this).show()
    })
    
    
    css:
    #id_comment_panel {
        display: none
    }
    
    • god
    • 5 楼

    @追梦人物 这个function是不是表单模板代码?

  • @god 是 html 元素,用来包裹评论表单。建议稍微先学习一点点 html 和 css,js 的知识,这里有不错的讲解:w3school js 教程

    • god
    • 7 楼

    不对啊 我把id写在了模板评论循环块的div里,还是不显示评论框,必须跳转到comment才看得到

  • 使用了 js?你用一个div 把评论框包起来,设置它的样式为 display=none,然后旁边放一个按钮,绑定一个点击事件,用户点击就修改display属性,让那个div显示出来。@god

    • god
    • 9 楼

    用的jQuery有邮箱或者QQ吗 指导下 @追梦人物

  • @god 最好能够先学习一下 css 和 jquery 的基础知识,否则我说了你可能也不是很明白。邮箱可发送到 zmrenwu@163.com

    • god
    • 11 楼

    好像理解错了 我的是连评论方框都不显示出来 就好比这篇文章 能显示我现在输入的方框 不用点击什么

  • 这个需要在模板中用form.as p显示出来?@god

    • god
    • 13 楼

    还是不对

  • 我明白你的意思了,你要让评论表单显示在详情页。在详情页面的视图函数里传一个 comment form 给模板变量就可以了。

    • god
    • 15 楼

    @追梦人物 为什么不能直接传入comment里面呢 因为详情页面{% include ‘comment.html’ %}

  • 因为你首先访问的是详情页,调用的detail视图函数。comment视图没有调用,form 没有传给模板@god

添加一条新回复
登录以回复