#html #django #django-class-based-views
#HTML #django #django-class-based-views
Вопрос:
Я начинаю использовать представления на основе классов для приложения, которое я создаю, но я не уверен, как это работает.
Мне нужно иметь три разных шаблона, и каждый шаблон будет отображать разную информацию в зависимости от поля модели. Мой вопрос в том, есть ли способ иметь только одно представление класса, которое может отображать три разных шаблона html с 3 разными контекстами, или мне нужно создать 3 разных класса.
Используя представления на основе функций, я бы просто сделал это:
# def humanResourcesView(request):
# context = {
# 'data' : Document.objects.all().filter(documentType='humanResources'),
# }
# return render(request, 'main/hr.html', context)
# #view to display training documents after click
# def trainingView(request):
# context = {
# 'data' : Document.objects.all().filter(documentType='training'),
# }
# return render(request, 'main/training.html', context)
# #view to display resource documents after click
# def reportsView(request):
# context = {
# 'data' : Document.objects.all().filter(documentType='reports')
# }
# return render(request, 'main/reports.html', context)
Но я не уверен, как это работает с представлениями на основе классов. В настоящее время у меня есть это, которое правильно отображает и фильтрует данные для одного шаблона, но я не знаю, как сделать несколько шаблонов. Нужно ли мне создавать 3 разных класса?
class DocumentView(View):
def get(self, request, *args, **kwargs):
reports = Document.objects.all().filter(documentType="reports")
context = {
'reports' : Document.objects.all().filter(documentType='reports')
}
return render(request, 'documents/reportsDocs.html', context)
Есть ли способ иметь только один класс и передавать определенный контекст в зависимости от
Комментарии:
1. Вы можете использовать
TemplateView
из общих представлений Django и переопределить егоget_template_name
метод. Но в вашем случае вы жестко запрограммировалиdocumentType
so, я не думаю, что вы можете переключаться на разные шаблоны. Для этого вам нужно передать свойdocumentType
сквозной URL и т. Д.
Ответ №1:
Вам нужно будет наследовать TemplateView
и переопределять get_template_names
метод, чтобы вернуть ваш условный шаблон. И вы бы переопределили get_context_date
выборку данных соответствующим образом.
from django.views.generic import TemplateView
class DocumentView(TemplateView):
def get_template_names(self):
pass
def get_context_data(self, **kwargs):
pass