Лучшие практики Django - как бы вы создали страницу с формой и списком элементов Django? - PullRequest
2 голосов
/ 19 февраля 2012

Я начинаю с django (и stackoverflow!)

Я пытался создать веб-страницу с формой и списком элементов.( Django - Смешивание ListView и CreateView ).Я придумал решение, но мой код меня не убедил!

Я использую Django mixin BaseCreateView и BaseListView для генерации формы и списка данных контекста.Но поскольку это взгляды, они звонят напрямую render_to_response().

Итак, я перегрузил метод get(), чтобы вручную вызвать оба родительских метода и извлечь данные контекста.Затем я сам позвонил * 1013.

class FormAndListView(BaseCreateView, BaseListView, TemplateResponseMixin):
    def get(self, request, *args, **kwargs):
        formView = BaseCreateView.get(self, request, *args, **kwargs) # formView contains a response_class
        listView = BaseListView.get(self, request, *args, **kwargs)   # listView contains a response_class as well...
        formData = formView.context_data['form']                      # extract the form from the response_class 
        listData = listView.context_data['object_list']               # extract the object list from the response_class

        return render_to_response('textfrompdf/index.html', {'form' : formData, 'all_PDF' : listData},
                           context_instance=RequestContext(request))

С одной стороны, я не переписываю то, что уже есть в миксине, для управления формами и списками элементов ... С другой стороны, djangoвычисление всего render_to_response() 3 раза!

Каким будет чистый Django-способ написать эту страницу?

1 Ответ

1 голос
/ 22 февраля 2012
class FormAndListView(BaseCreateView, BaseListView, TemplateResponseMixin):

    def render_to_response(context, **responsekwargs)
        return context

    def get(self, request, *args, **kwargs):
        context = {}
        context.update( BaseCreateView.get(self, request, *args, **kwargs) ) # formView contains a response_class
        context.update( BaseListView.get(self, request, *args, **kwargs) )  # listView contains a response_class as well...

        return TemplateResponseMixin.render_to_response('textfrompdf/index.html', context,
                           context_instance=RequestContext(request))
...