0

我已经研究了几天,我仍然无法解决这个问题!希望 StackOverflower 的同事可以在这里帮助我。

所以,现在我有一个自定义的 django 管理命令,它运行一个报告并发送和电子邮件,其中包含作为 xlsx 文件(excel)的报告。现在我想知道是否有一种方法可以在网站上获取该 Excel 报告,以便人们在不想收到电子邮件时可以下载并自行查看。

我已经设置了我的 url 和 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 工作簿保存到一个静态文件夹并从那里抓取它,但我只是想不出将文档嵌入我的模板中的确切代码......

4

1 回答 1

1

在 settings.py 中设置你MEDIA_ROOT的。你可以试试MEDIA_ROOT=BASE_DIR+'/media'。之后,在 settings.py 中创建您的媒体网址为MEDIA_URL='/media/'. 然后在模板中,您可以提及下载 url 作为src="{{MEDIA_URL}}/<DATE STRING HERE>" 检查媒体文件和静态文件的 Django 文档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.static 标签通常用于提供静态文件,如 css、js 等。使用 media_url 提供文件下载很好。

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

于 2016-08-09T18:37:05.457 回答