代码之家  ›  专栏  ›  技术社区  ›  Ulvi

名称错误:未定义名称“JSONResponseMixin”

  •  0
  • Ulvi  · 技术社区  · 6 年前

    https://docs.djangoproject.com/en/3.0/topics/class-based-views/mixins/ (链接中的最后一个代码)

    错误:

    /views.py", line 11, in <module>
        class ProgramListView(ListView, JSONResponseMixin, SingleObjectTemplateResponseMixin):
    NameError: name 'JSONResponseMixin' is not defined
    

    我的代码在视图.py:

    from programs.models import Program
    from django.views.generic import ListView, DetailView
    
    from django.http import JsonResponse
    from django.views.generic.detail import SingleObjectTemplateResponseMixin
    from django.views.generic.detail import BaseDetailView
    
    
    
    
    class ProgramListView(ListView, JSONResponseMixin, SingleObjectTemplateResponseMixin):
        
        model = Program
        template_name = 'programs/program_list.html'
        context_object_name = 'programs'
        paginate_by = 6
        paginate_orphans = 3
    
        def get_queryset(self):
    
            url_parameter = self.request.GET.get('q')
    
            # if self.request.method == 'GET' and self.request.is_ajax():
            if self.request.method == 'GET':
                queryset = Program.objects.filter(degree = url_parameter)
                return queryset
    
            if self.request.method == 'GET' and url_parameter is None:
                queryset = Program.objects.all()
                return queryset
    
    
        def render_to_response(self, context, url_parameter='BSc'):
            # Look for a 'format=json' GET argument
            # if self.request.GET.get('format') == 'json':
            # if self.request.is_ajax():
            if url_parameter=='BSc':
                return self.render_to_json_response(context)
            else:
                return super().render_to_response(context)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Aayush Agrawal    6 年前

    这是因为您没有导入JSONResponseMixin。事实上,Django没有这样的混合,这只是一个例子。

    如果您真的想添加它,请将此代码添加到 class ProgramListView

    from django.http import JsonResponse
    
    class JSONResponseMixin:
        """
        A mixin that can be used to render a JSON response.
        """
        def render_to_json_response(self, context, **response_kwargs):
            """
            Returns a JSON response, transforming 'context' to make the payload.
            """
            return JsonResponse(
                self.get_data(context),
                **response_kwargs
            )
    
        def get_data(self, context):
            """
            Returns an object that will be serialized as JSON by json.dumps().
            """
            # Note: This is *EXTREMELY* naive; in reality, you'll need
            # to do much more complex handling to ensure that arbitrary
            # objects -- such as Django model instances or querysets
            # -- can be serialized as JSON.
            return context
    

    https://docs.djangoproject.com/en/3.0/topics/class-based-views/mixins/#jsonresponsemixin-example

    if url_parameter=='BSc':
                return JsonResponse(context)