#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
, а не DjangoQueryDict
, чтоrequest.POST
и есть. У них существенно разное поведение.