Как отправить ответ от функции представления Django во всплывающее окно HTML
Итак, мое приложение работает следующим образом: 1- пользователь кликает и функция вызывает ajax jquery отправляет некоторые данные в функцию в views.py, Готово! 2- в функции будет произведен некоторый процесс. некоторые данные готовы. Готово! 3- Я хочу показать данные в html формате как всплывающее окно.
Итак, я застрял на шаге 3.
Я новичок в этом деле и не нашел никакой прямой инструкции.
Вы можете найти мой шаг 1 в Как отправить простые данные с помощью Ajax jQuery в views.py в Django?
Заранее спасибо Это почти так же просто, как и любое другое представление. Просто верните рендер, и вы можете использовать синтаксис шаблонов django для обработки контекстных данных.
Вам нужно только написать ajax-функцию (шаг 1), которая создает запрос,
представление, которое принимает его и возвращает данные (шаг 2).
Внутри функции ajax success из шага 1 добавьте данные в ваш HTML (или создайте всплывающее окно) Обязательно используйте инструменты разработчика, если вы застряли между шагом 2 и 3. Если django возвращает данные, вы сможете просмотреть их в форме ответа XHR В моем примере barcode.html содержит js-баркодсканер. После обнаружения кода он вызовет представление с параметром GET ?ajax=True и с кодом отслеживания_кода. Сервер ответит фрагментом barcode_snippet, который содержит контекстные данные о содержимом и клиенте. На основе флага canreturn пользователь сможет нажать на ссылку в окне подробностей, на этот раз он разместит данные, которые затем вызовут некоторые действия на стороне сервера.
Снова возвращается фрагмент barcode_snippet, на этот раз действие запрещено Затем я использую JQuery, чтобы прикрепить ответ (barcode_snippets) к моему сайту.# The HTML returned mainly consists of a javascript lib
@login_required
def barcode_scan(request):
# usually you would fill this page with some context data
return render(request, "barcode.html")
# View for accepting ajax requests and for returning more data
@login_required
def barcode_view(request, tracking):
shipment = get_object_or_404(PhysicalShipment, tracking_id=tracking)
if request.method == "POST":
if shipment.is_returnable():
# ... some more logic here ...
customer = shipment.customer
content = shipment.content
context = {
"customer": customer,
"content": content,
# ...
"canreturn": False,
}
return render(request, "barcode_snippet.html", context)
else:
success = False
error_message = shipment.get_status_error_message()
return JsonResponse({"success": success, "error": error_message})
elif request.GET.get("ajax"):
""" displays barcode shipment information """
customer = shipment.customer
content = shipment.content
context = {
"customer": customer,
"content": content,
# ...
"canreturn": shipment.is_returnable(),
}
return render(request, "barcode_snippet.html", context)
return render(request, "barcode.html")
success: function (response) {
$("#results").append(response);
}