CSV скачать в шаблоне Django - PullRequest
1 голос
/ 02 ноября 2009

В приложении django мне нужно показать результат поиска и позволить пользователю загрузить CSV-файл результата .
На самом деле я только что написал представление, которое принимает аргументы формы, чтобы выполнить запрос через ORM и представить результат в виде таблицы в шаблоне.

здесь конец представления:

return render_to_response(template, {'form': form, 'object_list': object_list}, context_instance=RequestContext(request))

Я хотел бы добавить ссылку под таблицей, которая загружает CSV-файл с представленным результатом. Я знаю, как создать CSV-файл в python / django, но не знаю, как представить его одновременно с результатом в шаблоне.

Есть идеи? Заранее благодарим за любой ответ.

Ответы [ 2 ]

7 голосов
/ 02 ноября 2009

Я предлагаю создать новую запись в urls.py для ссылки на скачивание CSV и подключить ее к представлению, которое возвращает CSV.

Затем в шаблоне результатов поиска вы можете указать ссылку на этот новый URL-адрес, передавая те же термины поиска, что и параметры GET, которые вы можете использовать в представлении CSV для повторного генерирования результата.

Чтобы уменьшить дублирование, поскольку теперь у вас есть обычное представление html и обработка представления csv, возвращающие одни и те же данные, вы можете создать одно представление с аргументом, который указывает, должен ли он возвращать отображаемый шаблон или результат CSV.

Вы упоминаете, что уже знаете, как это сделать, но в случае, если кто-то еще наткнется на эту страницу, вот как представление может вернуть CSV и заставить браузер загрузить его в виде файла:

def csv_list(request):
    """ Renders a csv list  """
    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename=file.csv'

    writer = csv.writer(response, dialect=csv.excel)
    writer.writerow(['col1', 'col2', 'col3'])
    return response
1 голос
/ 03 ноября 2009

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

Если вы хотите, чтобы ссылка на CSV была простым GET, вам нужно сгенерировать ссылку, динамически передавающую все эти параметры в строке запроса. Если параметров не слишком много, возможно, вы можете использовать пользовательский URLconf с этими параметрами в URL. В этом последнем случае, возможно, независимое представление для визуализации CSV будет работать лучше, поэтому при отображении HTML у вас не будет слишком большого количества параметров по умолчанию, равных None в представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...