django常用的通用檢視方法
阿新 • • 發佈:2018-12-10
1,列表檢視 class ArticlePostListView(ListView): model = ArticlePost context_object_name = 'post' template_name = 'course/course_list.html' # queryset = ArticlePost.objects.filter(user=User.objects.filter(username='admin')) #方法1 def get_queryset(self): #方法2 qs = super(ArticlePostListView,self).get_queryset() return qs.filter(user=User.objects.filter(username="admin")) 2,建立檢視 class CreateArticlePostView(CreateView): #繼承該類後不需要get方法 model = ArticlePost fields = ['title','body'] #對應form表單屬性 template_name = 'course/manage/create_coruse.html' #模板檔案 def post(self, request, *args, **kwargs): #重寫Post方法 form = ArticlePostForm if form.is_valid(): new_post = form.save(commit=False) new_post.user = self.request.user new_post.save() return redirect("course:namege_course") return self.render_to_response({'form':form}) #如果前端不需要request屬性,則可以使用render_to_response方法代替render方法 3,刪除檢視 class DeleteArticlePostView(DeleteView): model = ArticlePost # template_name = 'course/manage/delete_course_confirm.html' #原始方法,需要獨立頁面,不推薦 success_url = reverse_lazy("article:article_list") # reverse_lazy:當專案裡的URLConf未載入時用來取代reverse。reverse_lasy是reverse的一層封裝,這樣我就可以用reverse_lazy可以用在任何reverse def dispatch(self, request, *args, **kwargs): resp = super(DeleteArticlePostView, self).dispatch(*args,**kwargs) if self.request.is_ajax(): #針對ajax方法優化處理 response_data = {"result":"ok"} return HttpResponse(json.dump(response_data,content_type="application/json")) else: return resp # url(r'dedete-course/(?P<pk>\d+/$)',DeleteArticlePostView.as_view(),name='delete_course') #只支援pk和slug關鍵字 # href={% url 'course:delete_course' course.id %}