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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

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

Q&A

解決済

3回答

807閲覧

Djangoでjsファイルの記述にあるカスタムフィルタを反映させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

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

0グッド

0クリップ

投稿2018/08/21 04:28

概要

Djangoでアプリを制作しています。
カスタムフィルタを使用して、DBのデータをフィルタリングしております。
カスタムフィルタをテンプレートファイルに貼り付けると、問題なくフィルタリングされるのですが、
今回ボタンをクリックしてfilter.jsを読み込んで動的に見せたいと考えております。
外部にjsファイルを置き、ボタンを押すと、動的に記述データが出てくるようになりましたが、
カスタムフィルタによってコードが変換されず、コードがそのまま出てきてしまいます。
jsファイル内でカスタムフィルタを使用することはできないのでしょうか?
もしできない場合、動的にカスタムフィルタを表示させる方法があればご教授いただけないでしょうか?

表示されている画面

イメージ説明

コード

  • filter.js
function OnButtonClick() { document.getElementById("filter_place").innerText = "{{ value | A:customer_value.lesson.all }}"; }
  • monthly_invoice_list.html
<body> <h1> {{menu}} </h1> 請求月 <br> <input type = "button" value= {{ month }} onclick = "OnButtonClick()"> <br clear = "left"> <table border = "1", align = "left"> <tr> <th>顧客ID</th> <th>顧客名</th> <th>ジャンル</th> <th>合計レッスン数</th> <th>請求金額</th> </tr> {% for customer_value in customer_data %} <tr> <td>{{ customer_value.id }}</td> <td>{{ customer_value.name }}</td> <div id = "filter_place"> 以下省略
  • filter.py
from django import template register = template.Library() from datetime import datetime from django.db.models import Sum today = datetime.now() this_month_first_day = today.replace(day=1).strftime("%Y-%m-%d") today_month = today.strftime("%Y-%m-%d") def A(value, lesson_object): this_month_lesson_object = lesson_object.filter(lesson_date__range=(this_month_first_day, today_month)) lesson_gerne_list = list(this_month_lesson_object.order_by('gerne').reverse().values('gerne').values_list('gerne', flat=True).distinct()) delimit_lesson_gerne_list = '/'.join(lesson_gerne_list) return delimit_lesson_gerne_list register.filter('A', A)

バージョン情報

Python 3.6.6
Django 2.0.7

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

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

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

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

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

guest

回答3

0

filterは、テンプレートを元にサーバーサイドでHTMLをレンダリングするときに使われるものなので、
フロントエンド(javascript)では、機能しないと思います。

フロント側での選択を元に、再度サーバーへページの要求をする必要があると思います。

もしくは、全く別の仕組み(Djangoのテンプレートを利用せず、フロント側で画面構築する)が必要かも。

投稿2018/08/21 04:48

Meganezaru

総合スコア715

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

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

退会済みユーザー

退会済みユーザー

2018/08/21 04:55

早々にありがとうございました。画面遷移で対応します。
guest

0

ベストアンサー

まず、基本として
pythonで作成されたHTMLを表示 ⇒ HTMLがロードされた後にjavascriptでいじる
ということは可能ですが、javascriptはあくまでロード後に画面で動作する物なのでjavascriptでさらにpythonを記述するということはできません。
コードは書けても動かすことができないのです。
ページを遷移させるか、データを全て取得しておいて、カスタムフィルタの部分は全てjavascriptで制御するかの2択になるかと思います。

投稿2018/08/21 04:43

yukihisa

総合スコア672

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

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

退会済みユーザー

退会済みユーザー

2018/08/21 04:56

早々にありがとうございました。画面遷移で対応します。 なぜできないかがわかりやすかったため、ベストアンサーに選ばせていただきました。
guest

0

**** 削除 ****

投稿2021/02/19 01:29

編集2021/02/19 01:31
dameo

総合スコア943

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

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

dameo

2021/02/19 01:35

削除できないので好きなだけ低評価お願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問