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

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

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

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

Python

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

Q&A

1回答

17184閲覧

ボタンを押したらpythonファイルが実行される実装を行いたい。

ices_sinon

総合スコア479

Django

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

Python

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

0グッド

1クリップ

投稿2020/02/26 11:21

編集2020/02/27 00:19

Djangoを用いてWebアプリケーションを作成しているのですが、画面上でinputボタンを押した際にpythonファイルを実行したいと考えています。pythonファイルを実行するイメージがあまり持てなく、参考意見を伺いたいです。

下記の実装はファイル1ボタンを押したらviews.pyのtest_fileを実行しようと想定して作成したのですが、ファイルを実行できませんでした。python3 test_fileをコンソールで実行したのと同じ実装を想定しています。
python初心者で、常識的なことを質問してると思うのですが、宜しくお願いいたします。

index

1<p>ファイル実行ボタン</p> 2 <form action="{% url 'test' %}" method="post"> 3 {% csrf_token %} 4 <input type="submit" name="button_1" value="ファイル1"> 5 <input type="submit" name="button_2" value="ファイル2"> 6 </form>

python

1//views.py 2 3from .test import test_file 4 5def test(request): 6 if request.method == 'POST': 7 if 'button_1' in request.POST: 8 test_file.main() 9 elif 'button_2' in request.POST: 10 print("test") 11

python

1//urls.py 2 3from django.urls import path 4 5from . import views 6 7urlpatterns = [ 8 path('test', views.test, name='test'), 9]

宜しくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mackerel6.023

2020/02/26 14:34

test_file(test.pyですかね?)に内容を追記してもらえますか? あと、エラー等が出ている場合はそのメッセージを追記してもらえますか?
ices_sinon

2020/02/27 00:18

pythonファイルを実行できる環境を作りたかったので、test_file.pyの中身は特に指定はなく記載しませんでした。下記のようなpythonファイルを想定しております。 ``` //test_file.py def main(): print("hoge") if __name__ == '__main__': main() ```
t_obara

2020/03/11 02:47

参考意見も聞けて、イメージが湧いたと思うので、一度クローズしてはいかがでしょうか。
guest

回答1

3

やり方は2つあって、subprocessで呼び出すか、クラス化してimportするか、です。

ここではクラス化する場合について書いてみます。

まず、呼び出すスクリプトをこのように書き換えます。

Python

1class test(): 2 def __init__(self): 3 self.word = "Hello world." 4 def print_word(self): 5 print(self.word)

これをscripts/test.pyに保存します。

そして、view.pyで以下のように書きます。

Python

1from scripts import test 2 3def test(request): 4 if request.method == 'POST': 5 if 'button_1' in request.POST: 6 test.test().print_word() 7 elif 'button_2' in request.POST: 8 print("test")

以下の記事でちょっとまとめてみたので、よかったら参考にしてみてください。
https://mackerel-blog.com/django02

投稿2020/02/27 01:14

mackerel6.023

総合スコア317

kiddayo, ices_sinon, anyme👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ices_sinon

2020/02/27 02:30

クラスに書き換えるパターンとsubprocessのやり方参考になりました。 上の実装お聞きしたいしたいのですが、ボタンをクリックした瞬間にtest関数を呼ぶためにurlpatternsから関数を呼んでいるのですが、画面遷移を変えないでボタン押したらスクリプト処理が走るようにするためにはどうすれば良いでしょうか。ご教示いただきたいです。
mackerel6.023

2020/02/27 02:45

Djangoというよりはjavascriptのお話かもしれませんが、ajaxで呼び出してjson_responseを返すようなやり方で良いかと思われます。 具体的なやりかたは以下に追記しました。 https://mackerel-blog.com/django02#toc5
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.54%

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

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

質問する

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

Django

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

Python

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