2016-01-10 6 views
1

В моем веб-приложении я создал базовый поиск, который позволяет пользователю запрашивать записи на основе нескольких полей (дата, созданная и т. Д.). Я хочу, чтобы пользователь мог экспортировать эти конкретные результаты поиска в PDF/CSV, но мне трудно понять, как это можно сделать.Django - Экспорт результатов поиска в PDF/CSV

Я уже создал поиск и страницу результатов, которые работают. На странице результатов есть две разные гиперссылки/кнопки (не уверен, что я должен использовать еще), которые читают «Экспорт в PDF» и «Экспорт в CSV». Когда пользователь нажимает на ссылку/кнопку, он должен экспортировать результаты поиска. Я знаком с ReportLab и документами Django по экспорту в PDF. Мой вопрос конкретно в том, как я должен обрабатывать результаты поиска, чтобы я мог экспортировать их, если пользователь решает это сделать.

Каков наилучший подход к этой проблеме?

  • ли я сохранить результаты поиска в переменной сессии в качестве маринада объекта (Example Pt.1, Example Pt.2), а затем загрузить его, когда пользователь хочет экспортировать в PDF/CSV?

  • Должен ли я сохранять исходный SQL-запрос пользователя в базу данных, а затем искать его и повторно выполнять запрос, когда пользователь хочет экспортировать в PDF/CSV?

  • Должен ли я просто передавать переменные поиска в скрытые поля в форме на странице результатов, а затем, когда нажата «Экспорт в PDF», повторите поиск?

Есть ли общепринятый способ делать такие вещи? Я часто это вижу и хочу реализовать наилучшую практику.

ответ

0

Если ваши запросы не очень дороги, и ваши данные не должны меняться в период между тем, как пользователь увидел вашу страницу и нажал кнопку «Экспорт», вам не нужно сохранять ваши запросы и результаты на отдельный модель. Вы просто повторно запускаете запрос и передаете его своему пользователю не в HTML, а в другом формате.

CSV: Код представления, который генерирует ваш контекст, остается тем же, вы просто меняете выходной шаблон. Например, вы могли бы имитировать Django Rest Framework's behaviour, делая ваши URLs выглядеть следующим образом:

  • /a/path?with=query
  • /a/path.csv?with=query
  • /a/path.pdf?with=query

и выбирая approrpiate шаблон, основанный на пути.

Что касается PDF, все становится немного сложнее, взгляните на the Django docs.

0

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

Я так думаю, что вы должны сделать:

  1. Поиск пакетов PDF предоставления:

    1.1 The reportlab: это пакет по умолчанию предлагается в Джанго документации, но, насколько я там знаю будут некоторые проблемы вывод символов Unicode в PDF

    1.2 WKHTMLTOPDF: тот, который мне больше всего нравится! он использует двоичный файл для выполнения команды создания pdf, он прост в использовании и конвертирует ваш файл HTML в хороший PDF-файл. в настоящее время я использую его, но у вас будет несколько проблем с выполнением двоичного файла на рабочем сервере. 1.3 Python PDF Kit: еще один pdf-комплект.

  2. Поиск файла CSV делая доступные пакеты:

    2.1 вы можете использовать django csv: она проста в использовании, вы не будете иметь проблемы с созданием файла CSV.

  3. написать некоторые шаблоны, как это с помощью метода GET:

    def myview(request): 
    
        type = request.GET.get('type', 'html') 
    
        # do processing 
        if type == 'html': 
         # return html 
        else if type == 'csv': 
         # return csv 
        else if type == 'PDF': 
         # return PDF 
    

Когда URL http://yourserver/myview доступен он будет возвращать HTML часть считает, что это ваши результаты поиска. Если у вас есть доступ к URL-адресу, например http://yourserver/myview?type=csv, он отобразит часть представления csv. и http://yourserver/myview?type=pdf для вашего просмотра в формате PDF.

Смежные вопросы