1.render渲染
1.js代码放在HTML中 render返回页面,并将返回的数据渲染到而面上。即页面上只要有{ {}}就渲染, 但是在js代码中,使用{ {}},得不到渲染的值,原因是{ {}}未定义,js时一种语言,所有的变量都需要定义才能使用。 比如在python中输入a,运行报错,输入’a' 运行,就没问题。因此,在js中更需要为{ {}}定义类型 var article_id="{ { article.pk }}"; 加入引号,定义为str 2.js变为静态文件(即放到单独的文件中) var article_id="{ { article.pk }}";失效,会渲染不了。将js代码放到这个文件中,在HTML中引入 由于render遇到{ {}}才会渲染,而在当前HTML中中并没有{ {}} 因此js代码中数据渲染不了 解决方法:在HTML中新建标签,将js代码中需要的数据,添加到HTML中,这样js通过找到HTML中这个标签进行取值 在HTNL中添加标签:属性设置为需要的属性 js中取值: var article_id = $(".info").attr("article_id");
2.评论功能
1.在页面上显示出所有评论。即在处理article_detail函数时,从数据库中取得对应文章的评论表 渲染到页面 2.用户评论: 1.在文章处理页面,制作评论区,在评论框中显示出用户的昵称 2.判断用户是否登陆,如果未登陆,就去登陆,已登陆就做评论操作 3.用户评论分为根评论(直接输入评论)和子评论(回复别人),在子评论点击回复时,光标移到评论框内。设置一个属性区分是子评论还是跟评论。设置pid="" 4.如果是回复,就为其添加@用户名的功能 5.提交评论,判断是根评论还是子评论,如果是子评论,就将@用户名给去掉,通过索引进行切片 6.向后台发送数据,后台取到传递过来的文章id,pid和内容,并取到评论人的id,判断pid 7.如果是根评论,就将评论信息写到评论表中,如果是子评论,需将额外的付评论用户ip写进去 8.将评论内容,创建时间,用户名传给ajax 9.ajax接收到数据后,在评论例表中加入新拼接的标签 //拼接使用++ var comment_li= '
' + create_time + ' ' + username + '
' + content + '
3.评论树
'''def comment_tree(request,article_id): ret=list(models.Comment.objects.filter(article_id=article_id).values("pk","content","parent_comment_id")) print(ret) return JsonResponse(ret,safe=False) // 获取评论数据,展示评论树结构 $.ajax({ url: "/blog/comment_tree/" + '{ { article.pk }}/', success: function (data) { console.log(data); $.each(data, function (index, comment_dict) { var s = '' + comment_dict.content + '' if (comment_dict.parent_comment_id) { // 子评论 pid=comment_dict.parent_comment_id; $("[comment_id="+pid+"]").append(s); } else { // 根评论 $(".comment_tree").append(s); } }) } });'''
4.评论功能代码
'''{% block page-main %}{ { article.title }}
{#{ { article.desc }}
#}{
{ article.articledetail.content|safe }}{ { article.up_count }}{ { article.down_count }}评论列表
- { % for comment in comment_list %}
- #{ { forloop.counter }}楼 { { comment.create_time|date:"Y-m-d H:i" }} { { comment.user.username }} 回复{# 父评论 #} { % if comment.parent_comment_id %}
{
{ comment.parent_comment.user.username }}: { { comment.parent_comment.content }}{
{ comment.content }} { % endfor %}
昵称:
评论内容
'''def article_detail(request, username, pk): """ :param username: 被访问的blog的用户名 :param pk: 访问的文章的主键id值 :return: """ user = models.UserInfo.objects.filter(username=username).first() if not user: return HttpResponse("404") blog = user.blog # 找到当前的文章 article_obj = models.Article.objects.filter(pk=pk).first() # 所有评论列表 comment_list = models.Comment.objects.filter(article_id=pk) return render( request, "article_detail.html", { "username": username, "article": article_obj, "blog": blog, "comment_list": comment_list } )def comment(request): if request.method=='POST': article_id=request.POST.get("article_id") pid=request.POST.get("pid") content=request.POST.get("content") user_pk=request.user.pk response = {} if not pid: #此时是根评论 comment_obj=models.Comment.objects.create(article_id=article_id,user_id=user_pk,content=content) else: #此时是子评论,要添加父评论的id comment_obj=models.Comment.objects.create(article_id=article_id, user_id=user_pk, content=content,parent_comment_id=pid) response["create_time"]=comment_obj.create_time.strftime("%Y-%m-%d") #comment_obj.create_time是个日期对象,需要转换 response["content"]= content response["username"] = comment_obj.user.username return JsonResponse(response)'''