django загружают файл CSV с помощью ссылки

Я - новое для django и Python. Нужно некоторое руководство в этих поисках.

Случай: Когда пользователь поражает кнопку отправки в форму, она должна отобразить страницу Success и ссылку, где они могут загрузить результаты. Результаты находятся в файле Excel. Я могу создать вывод, чтобы превзойти файл с помощью xlwt модуль и отобразить страницу успеха индивидуально, но не обоих одновременно.

Что я имею: Я выполняю django1.1.1 на Windows XP с python 2.6. Был подобный вопрос, который задают, но не смог заставить его работать.

мой успех page.html имеет эту строку

<a href="../static/example.xls">Download CSV File</a>

urls.py:

url(r'^static/(?P<path>.*)$', send_file), 

views.py:

def send_file(request):

import os, tempfile, zipfile
from django.core.servers.basehttp import FileWrapper

"""                                                                         
Send a file through Django without loading the whole file into              
memory at once. The FileWrapper will turn the file object into an           
iterator for chunks of 8KB.                                                 
"""
filename = "C:/example.xls" # Select your file here.                                
wrapper = FileWrapper(file(filename),"rb")
response = HttpResponse(wrapper, content_type='text/plain')
#response['Content-Length'] = os.path.getsize(filename)
return response

Когда я нажимаю на ссылку, она дает ошибку пути

send_file() got an unexpected keyword argument 'path'
Request Method: GET
Request URL:    localhost:8000/webinput/static/example.xls
Exception Type: TypeError
Exception Value:    
send_file() got an unexpected keyword argument 'path'

BTW example.xls и в местоположениях C:/example.xls и в статической папке

Структура:

  • webdb
    • Статичный
      • example.xls
    • Webinput
      • urls.py
      • views.py
      • models.py

У меня есть эти 2 модуля также. Если я использую backup_to_csv, он хорошо работает, но это downlods непосредственно без ссылки. Как сделать то же, когда у меня уже есть файл. Если существуют другие пути, где я не должен хранить файл, который прекрасен также.

определение xls_to_response (xls, fname):

response = HttpResponse(mimetype="application/ms-excel")
response['Content-Disposition'] = 'attachment; filename=%s' % fname
xls.save(response)
return response

определение backup_to_csv (запрос, строка):

response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename="backup.csv"'
writer = csv.writer(response, dialect='excel')    
#code for writing csv file go here...
for i in row:
    writer.writerow(i)
return response
8
задан CraigTeegarden 14 April 2013 в 21:39
поделиться

2 ответа

Теперь он работает, но мне пришлось изменить расширение файла с excel (.xls) на csv.

My urls.py = url (r '^ static / example.txt ', send_file)
Моя HTML-ссылка = Загрузить файл CSV
My view.py

def send_file(request):

  import os, tempfile, zipfile
  from wsgiref.util import FileWrapper
  from django.conf import settings
  import mimetypes

  filename     = "C:\ex2.csv" # Select your file here.
  download_name ="example.csv"
  wrapper      = FileWrapper(open(filename))
  content_type = mimetypes.guess_type(filename)[0]
  response     = HttpResponse(wrapper,content_type=content_type)
  response['Content-Length']      = os.path.getsize(filename)    
  response['Content-Disposition'] = "attachment; filename=%s"%download_name
  return response
9
ответ дан 5 December 2019 в 14:03
поделиться

При принятии решения о том, нужно ли Чтобы использовать встроенный, я обычно держу в уме следующую идею: на современных машинах задержка памяти может быть большим узким местом, чем необработанные вычисления. Известно, что встраивание часто вызываемых функций увеличивает размер исполняемого файла. Кроме того, такая функция может быть сохранена в кэше кода ЦП, что уменьшит количество промахов в кэше, когда к этому коду потребуется доступ.

Следовательно, вы должны решить для себя: Увеличивает или уменьшает встраивание размер сгенерированного машинного кода? Насколько вероятно, что вызов функции вызовет промах в кеше? Если это пропитано по всему коду, то я бы сказал, что вероятность высока. Если он ограничен одним узким циклом, то вероятность, надеюсь, мала.

Я обычно использую встраивание в случаях, которые я перечисляю ниже. Однако если вас действительно беспокоит производительность, важно профилирование. Кроме того, вы можете проверить, действительно ли компилятор принимает подсказку.

  • Короткие процедуры, вызываемые в замкнутом цикле.
  • Очень простые средства доступа (получение / установка) и функции-оболочки.
  • Код шаблона в заголовке файлы, к сожалению, автоматически получают встроенную подсказку.
  • Сокращенный код, который используется как макрос. (Например, min () / max ())
  • Краткие математические процедуры. измените

    urls.py url(r'^static/(?P.*)$', send_file)
    

    на

    urls.py url(r'^static/example.xls$', send_file)
    

    В первом вы также передаете все, что находится после /, в представление в качестве другого параметра, но ваше представление не принимает этот параметр. другой вариант - принять этот параметр в представлении:

    def send_file(request, path):
        ...
    

    , но поскольку путь к вашему xls файлу жестко задан, я не думаю, что вам это нужно.

2
ответ дан 5 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: