2014-02-18 55 views
0

我所試圖做的模板:Django的:使基於請求數據與基於類的意見

產生一些默認輸入日期值頁面,並基於這些值的一些數據。 當選擇新的數據值時,我們生成更新的數據。

我正在使用基於類的視圖考慮應用程序的結構,我想擴展。

什麼不工作:

模板被渲染,但我不能動態獲取「開始」和「結束」的值來生成更新的數據。

我的問題:

是這樣的結構正確,邏輯在Django的標準實踐方面?你能指出我的代碼不正確嗎?

我的問題是關於這個topic。但是我想在視圖中保留所有邏輯。

非常感謝。

下面是一個簡化的位代碼:

的index.html

{% extends "base.html" %} 
    {% block main %} 
     {% include "_usage.html" %} 
     {{ generated_data }} 
     {{ table.render }} 
    {% endblock %} 

_usage.html

<div class="name"> 
    <span>From: <input id="id_start" name="start" type="text" value="{{ start }}"></span> 
    <span>To: <input id="id_end" name="end" type="text" value="{{ end }}"</span> 
    <button class="name" type="submit">Submit</button> 
</div> 

urls.py

urlpatterns = patterns('', 
    url(r'^$', GenericView.as_view(), name='index'), 
) 

views.py

from django.views.generic.base import View 
from django.template.response import TemplateResponse 

class UsageView(View): 
    template_name = '_usage.html' 
    default_start = '2014-01-01' 
    default_end = '2014-01-02' 

    def get(self, request): 
     data_dict = {'start': self.default_start, 'end': self.default_end} 
     response = TemplateResponse(request, self.template_name, data_dict) 
     return response 

class GenericView(UsageView): 
    template_name = 'index.html' 

    def get(self, request): 
     super(GenericView, self).get(request) 

     start_value = request.GET['start'] 
     end_value = request.GET['end'] 
     values = '1, 2, 3' 

     data_dict = {'start': start_value, 'end': end_value, 'generated_data': values} 

     response = TemplateResponse(request, self.template_name, data_dict) 
     return response 
+0

'_usage.html'如何工作?它似乎沒有任何HTML表單。 – arocks

+0

對不起,不清楚。我更新了我的問題。有一個我擴展的base.html文件。它具有基本html頁面生成所需的所有html代碼。 – Andrew

回答

1

這裏有很多錯誤。

首先,您在GenericView中的super調用沒有意義 - 您稱爲超級函數,但將結果丟棄。但是無論如何,你實際上無法做任何有關返回值的事情,因爲它正在返回一個呈現的響應,而不是你可以用來呈現模板的上下文值。

而不是繼承View和壓倒一切的get,你應該重寫TemplateView和壓倒一切的get_context_data:那麼你的方法可以簡單地設置相關的值被關注,並認爲自己將呈現模板的照顧。

其次,_usage.html中沒有實際的表單元素。這意味着提交按鈕將不會執行任何操作,所以您在request.GET中永遠不會收到您的字段值。您需要用<form action="." method="GET"> ... </form>包裝字段。

+0

謝謝Daniel。 – Andrew