簡體   English   中英

從基於 class 的視圖導出數據為 excel

[英]Export data as excel from class based view

我有基於 class 的視圖,當請求發布時,self.readdb() 會將字典結果提供給 self.db_result 變量,該變量將填充為 html 表。 這工作正常。

我需要將此表導出為 excel。

我的觀點.py

  class Download(View):
    def __init__(self, logger=None, **kwargs):
        self.logger = logging.getLogger(__name__)
        self.db_result = []

  def post(self, request):
    if request.method == 'POST':
        form = DownloadForm(request.POST, request.FILES)
        if form.is_valid():  
            self.db_result = self.readdb() 
            if self.db_result != False:
                return render(request,'download.html',{'present': self.db_result[0]})
        <table class="presenttb">
            <caption>Present in DB</caption>
            <tbody>
                {% for key, value in present.items %}
                    <tr>
                        <td> {{ key }} </td> <td> {{ value }} </td>
                    </tr>
                {% endfor %}
            </tbody>
            <a href="{% url 'export_excel' %}">Download excel file</a>
        </table>
    {% endif %}

我嘗試了以下方法,點擊時生成 excel 文件,但它沒有任何數據。 get function 中的 print(self.db_result) 正在打印 []。 看起來“post”的結果在“get”中不可用。

    def get(self, request):
       if request.method == 'GET':    
            if request.path_info == '/export/excel':
                print(self.db_result)
                response = self.export_users_xls()
                return response

    def export_users_xls(self):
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachement; filename="report.csv"'
        print(self.db_result)
        writer = csv.writer(response)
        writer.writerow(['Command', 'XML data'])

        return response

如何從“get”中的“post”function 訪問 self.db_result,以便生成 excel 文件。 如果我做錯了,請指導我糾正步驟。 我沒有使用模型。 來自帖子的 self.db_result 具有所需的結果,應填充為 excel。

你不能這樣。 GET 操作和 POST 操作是不同類型的請求 - 一個加載頁面並可能通過 URL 從表單發送名稱/值對,另一個在幕后發布這些對。 在一個 function 中創建的變量在另一個中不會立即可用,因為它們作為不同的請求/頁面加載運行。

如果您需要引用以前的變量,您可以將其存儲為 session 變量以備后用(更多信息請參見文檔

例如在你的帖子中()

    if form.is_valid():  
        self.db_result = self.readdb() 
        request.session['db_result'] = self.db_result

然后,在你的 get()

   #use session.get() to return None if variable has not been set.
   self.db_result = request.session.get('db_result')
   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM