Development #53666
Pouvoir définir le nom du fichier attaché retourné par une action de cellule JSON (mode response=raw)
Début:
03 mai 2021
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
La solution la plus évidente serait de simplement recopier l'entête content-disposition s'il y en a un, comme on copie l'entête content-type :
diff --git combo/public/views.py combo/public/views.py index 21e40c1d..f834d523 100644 --- combo/public/views.py +++ combo/public/views.py @@ -144,7 +144,10 @@ def ajax_page_cell(request, page_pk, cell_reference): ) if action_response: - return HttpResponse(action_response.content, content_type=action_response.headers['Content-Type']) + response = HttpResponse(action_response.content, content_type=action_response.headers['Content-Type']) + if 'content-disposition' in action_response.headers: + response['Content-Disposition'] = action_response.headers['Content-Disposition'] + return response if not request.is_ajax(): return HttpResponseRedirect(cell.page.get_online_url())
ou alors pour laisser la main plutôt au template qu'au connecteur faire ça au en laissant une partie libre dans l'URL de la vue ajax:
index 7df37d35..d80c2ffc 100644 --- combo/public/urls.py +++ combo/public/urls.py @@ -27,6 +27,11 @@ urlpatterns = [ views.ajax_page_cell, name='combo-public-ajax-page-cell', ), + url( + r'^ajax/cell/(?P<page_pk>\d+)/(?P<cell_reference>[\w_]+-\d+)/(?P<filename>[^/]+)$', + views.ajax_page_cell, + name='combo-public-ajax-page-cell', + ), url(r'^snapshot/(?P<pk>\w+)/$', manager_required(views.snapshot), name='combo-snapshot-view'), url(r'__style__/$', views.style), url(r'__skeleton__/$', views.skeleton), diff --git combo/public/views.py combo/public/views.py index 21e40c1d..7d32246c 100644 --- combo/public/views.py +++ combo/public/views.py @@ -106,7 +106,7 @@ def modify_global_context(request, ctx): @csrf_exempt -def ajax_page_cell(request, page_pk, cell_reference): +def ajax_page_cell(request, page_pk, cell_reference, filename=None): try: page = Page.objects.get(id=page_pk) except Page.DoesNotExist: @@ -144,7 +144,10 @@ def ajax_page_cell(request, page_pk, cell_reference): ) if action_response: - return HttpResponse(action_response.content, content_type=action_response.headers['Content-Type']) + response = HttpResponse(action_response.content, content_type=action_response.headers['Content-Type']) + if filename: + response['Content-Disposition'] = 'attachment' + return response if not request.is_ajax(): return HttpResponseRedirect(cell.page.get_online_url())
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a presque 3 ans
- Fichier 0001-jsoncell-copy-Content-Disposition-in-raw-cell-s-acti.patch 0001-jsoncell-copy-Content-Disposition-in-raw-cell-s-acti.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Emmanuel Cazenave il y a presque 3 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Benjamin Dauvergne il y a presque 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit d623ff4d8efb8b966babe3ceee14f6b9f9cf2d80 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Mon May 3 13:05:24 2021 +0200 jsoncell: copy Content-Disposition in raw cell's actions (#53666)
Mis à jour par Frédéric Péters il y a presque 3 ans
- Lié à Development #53720: test_import_export.test_import_export_pwa_navigation en échec après #53666 ajouté
Mis à jour par Frédéric Péters il y a presque 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
jsoncell: copy Content-Disposition in raw cell's actions (#53666)