ダウンロード可能なCSVファイルにデータをエクスポートしようとしています。私のウェブサイト上で "エクスポート"ボタンをクリックすると、すべての時点で私は405
という応答を得ます。 post
メソッドは、期待通りに機能します。response
すべてのデータが表示されます。以下のフィルタリングのptocessも期待通りに機能します。ここで405 on djangoでCSVファイルをエクスポートする
は、ビュークラスである:
class ExportInvoicesToCsvView(View, IsSuperuserMixin):
http_method_names = ['post', 'get']
def post(self, request, *args, **kwargs):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = (
'attachment; filename=raport.csv'
)
writer = csv.writer(response, delimiter=';')
filters = json.loads(self.request.body.decode('utf8'))
data = Data.objects.filter(filters)
writer.writerow([
'data.a', 'data.b', 'data.c', 'data.d', 'data.e'
])
return response
次のようにURLの設定は次のとおりです。
url(
r'^invoices-csv/$',
ExportInvoicesToCsvView.as_view(),
name='invoices-csv'
),
とHTMLテンプレート:ここ
<a href="{% url 'accountant:bills:invoices-csv' %}" type="button" class="btn btn-sm btn-default"
ng-click="getSelected()">
<i class="fa fa-files-o fa-2x pull-left"></i>
{% trans 'Exportuj do csv' %}
</a>
EDIT は、コンソールログです。
Method Not Allowed (GET): /accountant/bills/invoices-csv/
[27/Oct/2017 16:41:12] "GET /accountant/bills/invoices-csv/ HTTP/1.1" 405 0
[27/Oct/2017 16:41:15] "POST /accountant/bills/invoices-csv/ HTTP/1.1" 200 0
わかりましたように、使用される方法には問題があります。それにもかかわらず、私はpost
メソッドに入り、私が望むデータを得ることができます。
私は 'post'を' get'に変更しました。これは多かれ少なかれ動作し始めました(今度はPOSTで405となります)が、私はそのファイルをダウンロードすることになります。私はそれをさらに調査します。 – gonczor
それはテンプレートから 'POST'リクエストをしていないという証拠です。あなたの ''タグはビュー( 'GET')への単なるリンクです。自問してみてください;なぜ私は 'POST'が必要なのでしょうか? – TeaPow
これは、私が覚えている限り、サーバー上のデータを変更するためのものです。確かに、それはGETだけでなければなりません。 – gonczor