猿问

django的templates和url,views之间的关系怎么弄

django的templates和url,views之间的关系怎么弄


MMTTMM
浏览 990回答 2
2回答

慕少森

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217from django.core.urlresolvers import reverse_lazyfrom django.shortcuts import redirect, get_object_or_404from django.forms.models import modelform_factoryfrom django.apps import appsfrom django.views.generic.base import TemplateResponseMixin, Viewfrom django.views.generic.list import ListViewfrom django.views.generic.edit import CreateView, UpdateView, DeleteViewfrom braces.views import LoginRequiredMixin, PermissionRequiredMixinfrom braces.views import CsrfExemptMixin, JsonRequestResponseMixinfrom .models import Course, Module, Contentfrom .forms import ModuleFormSetfrom django.db.models import Countfrom .models import Subjectfrom django.views.generic.detail import DetailViewfrom students.forms import CourseEnrollForm# Create your views here.  class OwnerMixin(object):    def get_queryset(self):        qs = super(OwnerMixin, self).get_queryset()        return qs.filter(owner=self.request.user)  class OwnerEditMixin(object):    def form_valid(self, form):        form.instance.owner = self.request.user        return super(OwnerEditMixin, self).form_valid(form)  class OwnerCourseMixin(OwnerMixin, LoginRequiredMixin):    model = Course    fields = ['subject', 'title', 'slug', 'overview']    success_url = reverse_lazy('manage_course_list')  class OwnerCourseEditMinxin(OwnerCourseMixin, OwnerEditMixin):    fields = ['subject', 'title', 'slug', 'overview']    success_url = reverse_lazy('manage_course_list')    template_name = 'courses/manage/course/form.html'  class ManageCourseListView(OwnerCourseMixin, ListView):     template_name = 'courses/manage/course/list.html'  class CourseCreateView(PermissionRequiredMixin,                       OwnerCourseEditMinxin,                       CreateView):    permission_required = 'courses.add_course'  class CourseUpdateView(PermissionRequiredMixin,                       OwnerCourseEditMinxin,                       UpdateView):    permission_required = 'courses.change_course'  class CourseDeleteView(PermissionRequiredMixin,                       OwnerCourseMixin,                       DeleteView):    template_name = 'courses/manage/course/delete.html'    success_url = reverse_lazy('manage_course_list')    permission_required = 'courses.delete_course'  class CourseModuleUpdateView(TemplateResponseMixin, View):    template_name = 'courses/manage/module/formset.html'    course = None     def get_formset(self, data=None):        return ModuleFormSet(instance=self.course,                             data=data)     def dispatch(self, request, pk):        self.course = get_object_or_404(Course, id=pk, owner=request.user)        return super(CourseModuleUpdateView, self).dispatch(request, pk)     def get(self, request, *args, **kwargs):        formset = self.get_formset()        return self.render_to_response({'course': self.course,                                        'formset': formset})     def post(self, request, *args, **kwargs):        formset = self.get_formset(data=request.POST)        if formset.is_valid():            formset.save()            return redirect('manage_course_list')        return self.render_to_response({'course': self.course,                                        'formset': formset})  class ContentCreateUpdateView(TemplateResponseMixin, View):    module = None    model = None    obj = None    template_name = 'courses/manage/content/form.html'     def get_model(self, model_name):        if model_name in ['text', 'video', 'image', 'file']:            return apps.get_model(app_label='courses',                                  model_name=model_name)        return None     def get_form(self, model, *args, **kwargs):        Form = modelform_factory(model, exclude=['owner',                                                 'order',                                                 'created',                                                 'updated'])        return Form(*args, **kwargs)     def dispatch(self, request, module_id, model_name, id=None):        self.module = get_object_or_404(Module,                                        id=module_id,                                        course__owner=request.user)        self.model = self.get_model(model_name)        if id:            self.obj = get_object_or_404(self.model, id=id, owner=request.user)        return super(ContentCreateUpdateView, self).dispatch(request, module_id, model_name, id)     def get(self, request, module_id, model_name, id=None):        form = self.get_form(self.model, instance=self.obj)        return self.render_to_response({'form': form, 'object': self.obj})     def post(self, request, module_id, model_name, id=None):        form = self.get_form(self.model,                             instance=self.obj,                             data=request.POST,                             files=request.FILES)        if form.is_valid():             obj = form.save(commit=False)            obj.owner = request.user            obj.save()            print id, '&&&&&&&&&&&'            if not id:                print '****************'                Content.objects.create(module=self.module,                                       item=obj)                print '****************'            return redirect('module_content_list', self.module.id)        return self.render_to_response({'form': form, 'object': self.obj})  class ContentDeleteView(View):    def post(self, request, id):        content = get_object_or_404(Content,                                    id=id,                                    module__course__owner=request.user)        module = content.module        content.item.delete()        content.delete()        return redirect('module_content_list', module.id)  class ModuleContentListView(TemplateResponseMixin, View):    template_name = 'courses/manage/module/content_list.html'     def get(self, request, module_id):        module = get_object_or_404(Module,                                   id=module_id,                                   course__owner=request.user)        return self.render_to_response({'module': module})  class ModuleOrderView(CsrfExemptMixin,                      JsonRequestResponseMixin,                      View):    def post(self, request):        for id, order in self.request_json.items():            Module.objects.filter(id=id,                                  course__owner=request.user).update(order=order)        return self.render_json_response({'saved': 'OK'})  class ContentOrderView(CsrfExemptMixin,                       JsonRequestResponseMixin,                       View):    def post(self, request):        for id, order in self.request_json.items():            Content.objects.filter(id=id,                                   module__course__owner=request.user)\                .update(order=order)        return self.render_json_response({'saved': 'OK'})  class CourseListView(TemplateResponseMixin, View):    model = Course    template_name = 'courses/course/list.html'     def get(self, request, subject=None):        subjects = Subject.objects.annotate(            total_courses=Count('courses')        )        courses = Course.objects.annotate(            total_modules=Count('modules')        )        if subject:            subject = get_object_or_404(Subject, slug=subject)            courses = courses.filter(subject=subject)        print '***********', subjects, courses, subject        return self.render_to_response({'subjets': subjects,                                        'subject': subject,                                        'courses': courses})  class CourseDetailView(DetailView):    model = Course    template_name = 'courses/course/detail.html'     def get_context_data(self, **kwargs):        context = super(CourseDetailView,                        self).get_context_data(**kwargs)        context['enroll_form'] = CourseEnrollForm(            initial={'course': self.object})        return context 
随时随地看视频慕课网APP
我要回答