2015-05-22 5 views
1

У меня есть этот вид функции.Отображение функции преобразования в классе на основе Django + chartit

Как преобразовать эту функцию в Class Based View?

В этом случае я использую TemplateView?

def linechart(request): 
    ds = DataPool(
     series=[{'options': { 
      'source': MonthlyWeatherByCity.objects.all()}, 
      'terms': [ 
      'month', 
      'houston_temp', 
      'boston_temp']} 
     ]) 

    cht = Chart(
     datasource=ds, 
     series_options=[{'options': { 
      'type': 'bar', 
      'stacking': False}, 
      'terms': { 
      'month': [ 
       'boston_temp', 
       'houston_temp'] 
     }}], 
     chart_options={'title': { 
      'text': 'Weather Data of Boston and Houston'}, 
      'xAxis': { 
      'title': { 
       'text': 'Month number'}}}) 

    return render_to_response('core/linechart.html', {'weatherchart': cht}) 

ошибка Вернуться

enter image description here

+1

один день кто-то убьет вас для этого кода форматирования madzohan

ответ

2
class MyTemplateView(TemplateView): 
    template_name = 'core/linechart.html' 

    def get_ds(self): 
     return DataPool(...) 

    def get_water_chart(self): 
     return Chart(datasource=self.get_ds() ...) 

    def get_context_data(self, **kwargs): 
     context = super(MyTemplateView, self).get_context_data(**kwargs) 
     context['weatherchart'] = self.get_water_chart() 

     return context 

в URLs должно быть что-то вроде этого

url(r'^$', MyTemplateView.as_view(), name='index'), 
+0

см мой GitHub https://github.com/rg3915/chartit/commit/9dd195db3888e20b3fb06b7efd912f2ba2f1aaed –

+0

ваш get_water_chart не возвращает ничего ... добавить «возвращения» перед 'Chart (' https://github.com/rg3915/chartit/blob/9dd195db3888e20b3fb06b7efd912f2ba2f1aaed/myproject/core/views.py#L38 – madzohan

+0

Спасибо, отличное решение. Но жаль, что диаграмма не запущена в Python 3 –

0

Я думаю, что вам лучше всего было бы использовать общий вид вместо шаблон, так как так легко сделать переключатель. Что-то вроде:

from django.shortcuts import get_object_or_404 
from django.shortcuts import render 
from django.views.generic import View 

class LinechartView(View): 
    def get(self, request, *args, **kwargs): 
    ds = DataPool(
     series=[{'options': 
      {'source': MonthlyWeatherByCity.objects.all()}, 
      'terms': [ 
       'month', 
       'houston_temp', 
       'boston_temp']} 
     ]) 

    cht = Chart(
     datasource=ds, 
     series_options=[ 
      {'options': { 
       'type': 'bar', 
       'stacking': False 
      }, 
      'terms': { 
       'month': [ 
        'boston_temp', 
        'houston_temp'] 
     }}], 
     chart_options={ 
      'title': { 
       'text': 'Weather Data of Boston and Houston'}, 
       'xAxis': { 
        'title': { 
        'text': 'Month number' 
     }}}) 

    return render(request, {'weatherchart': cht}) 
    # Doing it like this also allows flexibility to add things like a post easily as well 
    # Here's an example of how'd you go about that 

    def post(self, request, *args, **kwargs): 
    # Handles updates of your model object 
    other_weather = get_object_or_404(YourModel, slug=kwargs['slug']) 
    form = YourForm(request.POST) 
    if form.is_valid(): 
     form.save() 
    return redirect("some_template:detail", other_weather.slug)  

Я пошел вперед и отформатирован в меру своих способностей, пытаясь увидеть его в StackOverflow. Почему бы не использовать IDE, как pycharm, чтобы сделать жизнь легкой (по крайней мере для форматирования)?