Погодные условия для прогулок в горы
Я создал сайт на Django, на котором впервые попытался создать сложное приложение. Это приложение, которое анализирует погодные условия на пике в горах, которым 17 лет. Я хотел показать подробный прогноз в отдельных шаблонах, поэтому у меня есть 17 просмотров, которые выглядят почти одинаково.
Всего 4 просмотра:
class KasprowyWierchForecastView(TemplateView):
"""
class for rendering view of detailed weather forecast for
Kasprowy Wierch peak
"""
template_name = 'mountain_base.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['Peak'] = PeakForecast.objects.filter(
name_of_peak='Kasprowy').order_by('date')
print(context['Peak'])
return context
class KoscielecForecastView(TemplateView):
"""
class for rendering view of detailed weather forecast for
Koscielec peak
"""
template_name = 'mountain_base.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['Peak'] = PeakForecast.objects.filter(
name_of_peak='Koscielec').order_by('date')
return context
class KrivanForecastView(TemplateView):
"""
class for rendering view of detailed weather forecast for Krivan peak
"""
template_name = 'mountain_base.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['Peak'] = PeakForecast.objects.filter(
name_of_peak='Krivan').order_by('date')
return context
class MieguszowieckiForecastView(TemplateView):
"""
class for rendering view of detailed weather forecast for
Mieguszowiecki peak
"""
template_name = 'mountain_base.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['Peak'] = PeakForecast.objects.filter(
name_of_peak='Mieguszowiecki').order_by('date')
return context
class MnichForecastView(TemplateView):
"""
class for rendering view of detailed weather forecast for
Mnich peak
"""
template_name = 'mountain_base.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['Peak'] = PeakForecast.objects.filter(
name_of_peak='Mnich').order_by('date')
return context
Только название класса представления и context['Peak']
разные. Остальной код избыточен. Поскольку мой опыт основан только на моем процессе самообучения, я не нашел хорошего решения, как исправить или реорганизовать.
Ответы
Один из вариантов - изменить ваш TemplateView
класс, чтобы включить имя пика в качестве атрибута экземпляра (скажем peak_name
), и использовать его в get_context_data
методе:
class TemplateView():
# Class attributes
def __init__(self, peak_name):
# Instance attributes
# ...
self.peak_name = peak_name
# Class methods
# Modification of the get_context_data method
def get_context_data(self, **kwargs):
context['Peak'] = PeakForecast.objects.filter(
name_of_peak=self.peak_name).order_by('date') #<- Modification here
print(context['Peak'])
return context
А затем вы можете сгенерировать свои пиковые просмотры как экземпляры этого класса:
krivan_view = TemplateView('Krivan')
krivan_view.get_context_data(arg1='arg1', arg2='arg2')