добавьте дополнительные данные в запрос.ОПУБЛИКОВАТЬ в django

#django #django-templates #http-post

#django #django-шаблоны #http-post

Вопрос:

Я работаю над функцией отображения PDF в Django, пользователь вводит данные в форме HTML и может нажать на Preview кнопку, чтобы просмотреть предварительный просмотр в формате PDF

это строки в моем views.py которые возвращают pdf в качестве ответа

 pdf = render_to_pdf('new_pdf.html', params)
return HttpResponse(pdf, content_type='application/pdf')
 

здесь render_to_pdf() используется шаблон HTML и обычный словарь python для встраивания данных на HTML-страницу и преобразования их в pdf

В настоящее время я передаю данные формы POST как параметры, т.е. params = {'data':request.POST}

запрос.СООБЩЕНИЕ выглядит так

 <QueryDict: {'csrfmiddlewaretoken': ['some_random_string_here'], 'client_id': ['26'], 'note_no': ['5']}>
 

и еще несколько полей…

теперь я могу просто использовать {{data.client_id}} в своем HTML для получения данных

до сих пор все работает нормально

но мне нужно предоставить некоторые дополнительные данные в мои параметры для отображения в формате pdf

Мне было интересно, есть ли способ, которым я могу добавить свои дополнительные переменные, request.POST например

 request.POST['credit_type'] = [credit_type]
 

но это не обычный словарь python и дает
This QueryDict instance is immutable

есть ли какие-либо обходные пути для этого??

или я должен использовать обычный подход добавления пар ключ-значение к моему params , а затем использовать их?

Комментарии:

1. Я бы предпочел использовать «обычный» подход и заполнить контекст и даже проверить данные POST, прежде чем вводить их в контекст. Тогда у вас будет чистый контекст.

2. В настоящее время я использую эти данные для простого отображения в формате pdf (без роли базы данных), поэтому я полагаюсь на проверки HTML и javascript для этой конкретной части … и да, я проверяю данные POST в серверной части перед сохранением в базе данных … в любом случае спасибо за предложение: D

Ответ №1:

 if request.method == 'POST':
    updated_request = request.POST.copy()
    updated_request.update({'credit_type': [credit_type]})
 

Комментарии:

1. это обновляет переменные в запросе. POST, а также сохраняет тот же тип данных … спасибо за решение: D

Ответ №2:

Вы можете попробовать распаковать request.POST словарь и добавить свои собственные пары ключ-значение. Таким образом, вы сохраняете исходный словарь нетронутым.

 new_dict = {**request.POST, 'custom_key': custom_val}
 

Комментарии:

1. Обратите внимание, что это создает dict , а не Django QueryDict , что request.POST и есть. У них существенно разное поведение.