質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

djangoでcsv出力する処理を実現したい

kaitouEx
kaitouEx

総合スコア19

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2回答

0評価

0クリップ

91閲覧

投稿2022/08/05 09:32

編集2022/08/13 17:28

前提

Pythonとdjangoの初心者です。Javaはそこそこ理解しています。
Twitterから投稿内容を取得して二次元配列にし、csv出力するアプリをdjangoで作成しております。

イメージ説明
以下にコードを載せますが、
views.pyの中のget関数で処理して取得してきた2次元配列を同一クラス内の別関数、csv_export関数でクラスオブジェクトに持たせた2次元配列データをresponseオブジェクトに変換して返却する機能を実装中に、以下のエラーメッセージが発生しました。
エラー発生タイミングは、ツイートを取得して、results.htmlのページが出たときにCSVダウンロードボタンを押下したタイミングです。

イメージ説明

実現したいこと

・results.htmlの中のcsv出力ボタンを押下したときにcsvをダウンロードさせたい

試したこと

views.pyの中の、
■■■■  ■■■■ で囲んだ部分でセッター、ゲッターを置いて処理できないかと試していましたが
うまくいきませんでした。

発生している問題・エラーメッセージ

TypeError at /csv/ csv_export() missing 1 required positional argument: 'self'

該当のソースコード

twittersearch/urls.py

from django.contrib import admin from django.urls import path,include from .views import helloworldfunc urlpatterns = [ path('admin/', admin.site.urls), path('', include("search.urls"),name="search"), ]

twittersearch/search/urls.py

from django.urls import path from . import views app_name = "search" urlpatterns = [ path('csv/', views.SearchView.csv_export,), path('', views.index, name="index"), ]

twittersearch/search/views.py

import csv import os from django.http import HttpResponse from django.shortcuts import render from django.views import generic from django.views import View from . import scraping import time import pandas as pd #Viewを継承してGET文、POST文の関数を作る class SearchView(View): def __init__(self): self:list = None def get_list(self): return self.__list def set_list(self, list): self.__list = list def csv_export(request, self): response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="result.csv"' writer = csv.writer(response) # ■■■■ここにget関数でセットしたcsv用の配列をresponseオブジェクトに書き込みたい■■■■ for tweets in this.get_list(self): writer.writerow(tweets) return response def get(self, request, *args, **kwargs): if "search_word" in request.GET: print(request) if request.GET["search_word"] != "": start_date = request.GET["start_date"] end_date = request.GET["end_date"] # search_limit = 100 # if request.GET["search_limit"] != "": # search_limit = request.GET["search_limit"] start_time = time.time() word = request.GET["search_word"] #検索結果を表示。2次元配列が返却される(コードは省略しています) tweets_list = scraping.search_twitter(word, start_date, end_date) end_time = int(time.time() - start_time) context = { "search_word" : word, "start_date" : start_date, "end_date" : end_date, "data" : tweets_list, "time" : end_time } # ■■■■ここにcsv_export関数で使うための配列をクラスプロパティにセットしたい■■■■ self.__list = tweets_list return render(request,"search/results.html",context) return render(request,"search/base.html") def post(self, request, *args, **kwargs): pass index = SearchView.as_view()

templates/base.html

{% load static %} <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Twitter検索 (snscrape)</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous"> <link rel="stylesheet" href="{% static 'css/style.css' %}"> {% block head %} {% endblock %} </head> <body> <h1 class="title"><a href="{% url 'search:index' %}">Twitter検索 (snscrape)</a></h1> <main class="container"> <form class="search_area" action=""> 取得開始日:<input class="form-control" type="date" name="start_date" value="{{ start_date }}"> 取得終了日:<input class="form-control" type="date" name="end_date" value="{{ end_date }}"> 検索キーワード(Enter)<input class="form-control" type="text" name="search_word" autofocus value="{{ search_word }}"> </form> {% block main %} {% endblock %} </main> </body> </html>

templates/results.html

{% extends "search/base.html" %} {% block main %} <!--ここに検索結果を表示する--> {% if data|length != 0 %} <p>{{ data|length }} 件ヒットしました (所要時間:約 {{ time }} 秒)</p> <button type=“button” onclick="location.href='/csv'">CSVダウンロード</button> <p>{{ data }} </p> {% for content in data %} <div class="sitelink_area"> <div class="sitelink"><a href="{{ content.url }}">{{ content.title }}</a></div> <!--truncatechars_htmlで指定文字数で切り詰めできる--> <div class="url">{{ content.url|truncatechars_html:"100" }}</div> </div> {% endfor %} {% else %} <p><span class="caution"> {{ search_word }} の検索結果は見つかりませんでした。</span>(所要時間:約 {{ time }} 秒)</p> {% endif %} {% endblock %}

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。