[英]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.