2014-09-25 3 views
0

Попытки использовать подмешать, чтобы создать представление класса на основе в Django, но получает следующее сообщение об ошибке:Джанго класса на основе Mixin вид не возвращает объект HttpResponse

ValueError: The view twitter.views.TwitterExampleView didn't return an HttpResponse object. 

Как показано в приведенном ниже коде , Я расширяю из представления создание базы TwitterView для приложения для обработки сообщений об ошибках, возвращаемых из Twitter. Это представление дополнительно расширено для TwitterNetworkView, где сеть Twitter подключена к представлению. Другие классы допускают некоторое преобразование с параметрами, передаваемыми в запросы. Последний класс, TwitterExampleView, включает в себя как mixin для преобразования параметров, так и TwitterNetworkView. Метод get возвращает в качестве заполнителя строку «blah». Только когда он возвращается в диспетчеризацию, это ответ, сделанный так, что я пропускаю?

class TwitterView(View): 

    def dispatch(self, request, *args, **kwargs): 
    try: 
     response = super(TwitterView, self).dispatch(request, *args, **kwargs) 
     return render_response(request, response) 
    except TwitterApiException, e: 
     return return_error(request, e, e.status_code) 

class TwitterNetworkView(TwitterView): 

    def dispatch(self, request, *args, **kwargs): 
     self.network = get_network_or_404(request.user, kwargs['network_id']) 
     super(TwitterNetworkView, self).dispatch(request, *args, **kwargs) 

class DefineParamsMixin(object): 
    def get_params(self): 
    return null 

class TwitterPagedDefineParams(DefineParamsMixin): 
    def get_params(self): 
    return define_params(
      Param('page'), 
      Param('since'), 
      Param('before'), 
      Param('limit', transform_func=int) 
     ) 

class TwitterExampleView(TwitterPagedDefineParams, TwitterNetworkView): 

    def get(self, request, *args, **kwargs): 
    return "blahhhhh" 
+0

хорошо, не уверен если я понимаю ваш вопрос. Однако сообщение об ошибке имеет смысл. так как вы вернули 'blahhhh' в ваши методы .get(). Я имею в виду, независимо от того, как вы создаете свое представление, django ожидает объект HttpResponse. –

+0

Что возвращаются ваши вызовы 'render_response' и' return_error'? Если я не пропущу что-то в цепочке наследования, это то, что подготовит окончательное возвращаемое значение. Получение 'response =" blahhhhh "' в вашем случае 'TwitterExampleView'. –

+0

render_response -> return HttpResponse (data, content_type = content_type, status = status) –

ответ

1

Ты ничего от dispatch не возвращающейся в вашем TwitterNetworkView Mixin. Без инструкции return метод возвращает None, а не HttpResponse. Одним из исправлений было бы вернуть результат super(TwitterNetworkView, self).dispatch(request, *args, **kwargs).

+0

У вас есть глаза сокола - Я перемещал вещи и явно упускал из виду это. Спасибо, что спасли меня от себя. :-) –

0

Необходимо вернуть объект HttpResponse.

from django.http import HttpResponse 

... 

class TwitterExampleView(TwitterPagedDefineParams, TwitterNetworkView): 

    def get(self, request, *args, **kwargs): 
     return HttpResponse("blahhhhh") 

Посмотрите на https://docs.djangoproject.com/en/1.7/intro/tutorial03/#write-your-first-view

+0

мой метод render_response возвращает HttpResponse -> return HttpResponse (data, content_type = content_type, status = status) –

Смежные вопросы