В базе данных у меня есть набор вопросов. Я хочу отображать каждый вопрос в сворачиваемом элементе в виде списка. Раньше я использовал TemplateView:В чем разница между использованием TemplateView и ListView в Django?
class questionmanager(TemplateView):
template_name = 'questionmanager.html'
questions = Question.objects.all()
def get_context_data(self, **kwargs):
context = ({
'questions': self.questions,
})
return context
Затем я прочитал, что с помощью ListView лучше практика, чтобы представить список объектов. Тогда я изменил свой класс на это:
class QuestionListView(ListView):
model = Question
def get_context_data(self, **kwargs):
context = super(QuestionListView, self).get_context_data(**kwargs)
return context
В старом шаблоне я использовал этот цикл:
{% for question in questions %}
Я подумал, что мне не нужно было бы использовать для цикла, когда я использую ListView вместо TemplateView; но я не мог перечислить элементы без цикла for. Я нашел пример here, и мне кажется, что разница в том, что в цикле for мы используем object_list ({% for question in **object_list** %}
) вместо использования аргумента, который мы передаем в контексте.
Я действительно не вижу такой большой разницы между использованием TemplateView и ListView - потратив на это час. Я был бы признателен, если кто-нибудь объяснит, почему использование ListView вместо TemplateView является лучшей практикой (в данном случае).
Заранее спасибо.
Спасибо. Диаграммы иерархии в ссылках, которые вы дали, очень полезны. Я также узнал, что могу изменить имя по умолчанию, переопределив функцию get_context_object_name. Я думаю, что понимание разницы явно потребует времени и опыта. Но если вы можете предоставить хороший пример использования ListView, это было бы здорово. Еще раз спасибо! – melis
Пример, который вы дали, - это случай учебника для использования «ListView», даже если вы можете использовать «TemplateView», в этом случае нет причин. С большинством общих представлений на основе классов вы обнаружите, что вы можете заставить их работать, как и другие представления на основе классов, но для типичного варианта использования действительно нет никакого смысла. – crhodes