Django Management Command可下载的文件

时间:2016-08-09 14:26:13

标签: html django django-templates django-views django-management-command

我已经研究了好几天了,我仍然无法弄清楚这一点!希望StackOverflower的同伴可以帮助我。

所以,现在我有一个自定义django管理命令,它运行报告并发送包含报告的电子邮件和xlsx文件(excel)。现在我想知道是否有办法在网站上获得excel报告,以便人们可以下载并自己查看,如果他们不想收到电子邮件。

我已经设置了我的网址和html模板,我现在需要的是将我的报告链接(从我的管理命令生成)放到我网站上的模板中,这样任何人都可以下载它!请帮忙!我卡住了!

管理命令(简明)

FILENAME = tempfile.mkstemp('.xlsx', 'EDIComplianceReport')
class Command(BaseCommand):
    def handle(self, *args, **options):

    final_results[carrier_scac] = carrier_results


    ts_util.sendMessage(['cmeeks@re-trans.com'],
                        'EDI Compliance Report', '\n EDI Compliance Report Attached',
                        self.populateSpreadsheet(final_results))



    def populateSpreadsheet(self, results):
            workbook = xlsxwriter.Workbook(STATICFILES_DIRS + 'ediportal/ComplianceSummaryReports/' + str(datetime.now().strftime('%Y%m%d%H%M%S'))) #appends a unique time at the end of the file to prevent overwrite



            format01 = workbook.add_format({'border': 1, 'bold': True,'align': 'center', 'bg_color': '#DDDDDD'})
            format02 = workbook.add_format({'border': 1, 'bold': True, 'bg_color': '#9999FF', 'align': 'center'})
            format03 = workbook.add_format({'border': 1, 'bold': True, 'font_color': 'red', 'bg_color': 'white', 'align': 'center'})
            format04 = workbook.add_format({'border': 1, 'bold': True, 'bg_color': 'white', 'align': 'center'})

            worksheet = workbook.add_worksheet("Summary")
            row = 0
            col = 0
            sorted_carriers = list(CARRIERS.keys())
            sorted_carriers.sort()
            for i, carrier in enumerate(sorted_carriers):
                worksheet.write(i+row, 0, carrier, format01)
                worksheet.write(i+row, 1, 'Estimated Overall Compliance', format01)
                worksheet.write(i+row+1, 1, results[carrier]['overall_compliance'], format03)
                for ind, code in enumerate(CARRIERS[carrier].split(',')):
                    if code != 'overall_compliance':
                        worksheet.write(i+row, ind+2, code, format02)
                        worksheet.write(i+row+1, ind+2, results[carrier][code], format04)
                row += 2

            workbook.close()
            return FILENAME[1]

因此,我想提供名为EDIComplianceReport.xslx的文件,并允许其他人将其作为html模板上的链接下载。

现在它只是在我的本地主机上运行!!! 我已经想到将excel工作簿保存到静态文件夹并从那里抓取它,但我无法弄清楚将文档嵌入模板的确切代码......

1 个答案:

答案 0 :(得分:1)

在settings.py中设置MEDIA_ROOT。您可以尝试MEDIA_ROOT=BASE_DIR+'/media'。之后,在settings.py中创建您的媒体网址MEDIA_URL='/media/'。然后在模板中,您可以提及下载网址为src="{{MEDIA_URL}}/<DATE STRING HERE>" check Django docs on media files here和静态文件 here。最好在应用程序的models.py中设置模型来处理文件上传。典型的模型如下所示。

class ExcelUploads(models.Model):
    excel_file = models.FileField(upload_to='/media/excel_files')
    description = models.CharField(max_length=255)

def __unicode__(self):
    return self.description

要为您的Excel文件提供下载链接,请在添加{% static %} template tag后使用{{MEDIA_URL}}django.template.context_processors.media to your 'context_processors' under TEMPLATES section of settings.py。静态标记通常用于提供静态文件,如css,js等。很高兴使用media_url来提供文件下载。

因此,根据发布的答案中的模型定义,您的下载链接看起来像src="{{MEDIA_URL}}/{{ExcelUploads[0].excel_file.url}}"