当前位置: 首页 > Web前端 > HTML5

Django20200424博客开发016

时间:2023-04-05 17:36:50 HTML5

目标效果:修改blog\_detail.html的提交评论和评论列表样式及相关区域。由于表单提交需要id和content\_type,所以我们在html中的表单中也需要写这些提交评论{%ifuser.s_authenticated%}{%csrf_token%}"comment_text">{{user.username}},欢迎评论~{#使用input不能输入多行,所以替换用textarea写多行内容,在bootstrap中使用form-control优化编辑区和提交功能的性能#}inputtype="hidden"name="object_id"value="{{blog.pk}}">{%Else%}不符合逻辑,登录后可以评论{%CSRF_TOKEN%}用户名:/span>Password:{%Endif%}

评论列表{%forcommentincomments%}
{{comment.user.username}}:n:s"}}):{comment.text}}
{%Empty%}没有评论{%EndFor%}
修改blog.cssdiv.comment-area{margin-top:2em;}h3.comment-area-title{border-bottom:1pxsolid#ccc;padding-bottom:0.4em;}登录后跳转到首页,这个操作不太好,修改mysiteredirect('originalpage')在/views.py;meta所在的页面通过referer=request.META.get('HTTP_REFERER','/'),??然后导入reverse,使用reverse从django.urls解析home到原始页面importreverse...deflogin(request):...referer=request.META.get('HTTP_REFERER',reverse('home'))如果用户不是None:auth.login(request,user)returnredirect(referer)else:...comment/views.py中一个新的视图函数用于处理前端提交的表单:defupdate_comment(request):fromdjango.shortcutsimportrender,redirectfromdjango.contrib.contenttypes.modelsimportContentTypefromdjango.urlsimportreversefrom.modelsimportCommentdefupdate_comment(request):"""用于处理blog_detail.html中提交的评论表单"""#因为提交的内容有三个,三个对象用于接受referer=request.META.get('HTTP_REFERER',reverse('home'))#数据检查如果没有request.user.is_authenticated:returnrender(request,'error.html',{'message':'用户未登录','redirect_to':referer})text=request.POST.get('text','').strip()iftext=='':returnrender(request,'error.html',{'message':'评论内容为空','redirect_to':referer})try:content_type=request.POST.get('content_type','')object_id=int(request.POST.get('object_id',''))model_class=ContentType.objects.get(model=content_type).model_class()model_obj=model_class.objects.get(pk=object_id)exceptExceptionase:returnrender(request,'error.html',{'message':'评论对象不存在','redirect_to':referer})#检查通过,保存数据对应路由处理:update_commentfromdjango.urlsimportpathfrom.importviewsurlpatterns=[path('update_comment',views.update_comment,name='update_comment')]添加路径到总路由:mysite/urls.pypath('comment/',include('comment.urls')),run:但是我们发现,运行之后,后台只提交了评论,修改了blog/views.py中的blog_detail函数和用于导入from的方法django.contrib.contenttypes未显示在网页上。模型从comment.modelsimportComment...defblog_detail(request,blog_pk):...blog_content_type=ContentType.objects.get_for_model(blog)comments=Comment.objects.filter(content_type=blog_content_type,object.pk_id=blog)...context['comments']=comments...效果如下:修改评论模型:comment/models.py但是如果评论内容无法提交,会报错:intheviews.注释的py:strip()是用来去掉前后空格的;另外,如果object\_id不存在,应该返回错误信息;在error.html中添加返回链接{{message}},return