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

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

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

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

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

Python

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

Q&A

解決済

1回答

794閲覧

色とJSON情報が合っていない

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

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

Python

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

0グッド

0クリップ

投稿2017/09/04 05:31

編集2017/09/04 06:00

色とJSON情報が合っていなくどう直せば良いのでしょうか?
PythonとDjangoとHTMLとJSでWEBサイトを作っています。{{ form }}のドリルダウンをいじると背景・h1・pの色が変わるしくみになっています。
index.html に

<!DOCTYPE html> <html> <head lang="ja"> <meta charset="UTF-8"> </head> <body> {{ form }}<br> <hr> <h1>h1LETTER</h1> <p>pLETTER</p> {{ form }}<br> <hr> <h1>h1LETTER</h1> <p>pLETTER</p> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script> var xhr = new XMLHttpRequest(); xhr.onload = function(){ colors = JSON.parse(xhr.response) console.log(colors) color_array = [] for (var i=0 ; i<=colors.length ; i++){ color_array[i] = { "background-color" : colors[i]["background_color"], "h1" : colors[i]["h1_color"] , "p" : colors[i]["p_color"] , }; } } xhr.open("GET","http://localhost:8000/app/api/get/",false); xhr.send({}) function change_color(){ color_id = $("#id_color").val(); color_object = color_array[color_id]; $("body").css("background-color", color_object["background-color"]); $("h1").css("color", color_object["h1"]); $("p").css("color", color_object["p"]); } $( '#id_color' ).change( function () { change_color(); }); change_color(); </script> </body> </html>

と書きました。{{ form }} のところにモデルにある色の情報が入るようになっています。models.pyには

from django import forms from .models import Color class ColorForm(forms.Form): color = forms.ModelChoiceField( queryset=Color.objects.all(), empty_label=None, required=False, )

と書きました。
今、WEBサイトは
![イメージ説明
イメージ説明
イメージ説明
のような状態で、
ドリルダウンで選択した色と背景の色が合っていません。
JSONは
イメージ説明
のようにちゃんと取得しているのでなぜこのように背景色とドリルダウンで選択した色が一致していないのかわかりません。
どのように直せば良いのでしょうか?

{{ form }}のところには

<tr><th><label for="id_color">Color:</label></th><td><select name="color" id="id_color"> <option value="1">white</option> <option value="2">green</option> <option value="3">pink</option> </select></td></tr><br>

と表示されていて、
change_color()実行時のcolor_array値は
イメージ説明
のようになっています。

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

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

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

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

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

m.ts10806

2017/09/04 05:35

{{ form }}のところに、実際に表示されたHTMLソースをご提示願えますか?
m.ts10806

2017/09/04 05:46

念のためchange_color()実行時にcolor_arrayに想定どおりの値が入っているかconsole出力した結果を教えてください。
退会済みユーザー

退会済みユーザー

2017/09/04 06:00

情報を追加しました。もしわかったらお願いします。
m.ts10806

2017/09/04 06:54

{{ form }}~h1~pがhtmlに2回出てきているのですが、記載ミスですか?
guest

回答1

0

ベストアンサー

プルダウンが1,2,3に対し、取得したjsonから作った配列は0,1,2となっています。
そのため1つずつずれが発生しているのではないでしょうか。
3つ目が変わっていないのは「3」がcolor_arrayには存在せず、
consoleでは存在しないキーを指定しているエラーが出力されているため、
処理が進まず何も起きていないというところでしょうね。
{{ form }}にどのようにしてselectをアサインしているかは分かりませんが、
キーをjsonかselect生成のどちらかに寄せた方が良いですね。

投稿2017/09/04 07:11

m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2017/09/04 08:46

ありがとうございます。確かに1つずつずれていそうです。 color_array = [] for (var i=1 ; i<=colors.length ; i++){ color_array[i] = { "background-color" : colors[i]["background_color"], "h1" : colors[i]["h1_color"] , "p" : colors[i]["p_color"] , }; } } のように書いたのですがやはりずれたままです。 直すところが違いましたか?
m.ts10806

2017/09/04 09:12

color_arrayの内容は想定通りですか? キャッシュなど残っていると最新の状態でないかもしれませんので念のためキャッシュクリアをお試しください。 あと、htmlのinputから取得した情報は基本的に文字列のはずなので念のためparseIntで数値化も試してください。 あと気になるとしたら・・・質問修正依頼に書いた内容でしょうか。htmlに2回出てきているところ。
退会済みユーザー

退会済みユーザー

2017/09/04 09:29

htmlのinputから取得した情報とはどこのことをさしていますか?
退会済みユーザー

退会済みユーザー

2017/09/04 09:33

ちなみに、ドリルダウンはwhite => green => pink の順になっているのですが、pinkの時にエラーが起きていました。ちゃんとJSONの値は取得できているんですけどね...
m.ts10806

2017/09/04 22:04

>htmlのinputから取得した情報とはどこのことをさしていますか? すみません。表現が悪かったです。入力コントロール(=今回の場合はプルダウン)です > pinkの時にエラーが起きていました エラー内容は今回jsonから作った配列の3を参照しようとしてということだと思います。 おそらく0,1,2で作られているのではないでしょうか? 手元で作ってみた感じ、1,2,3で作れた場合はきちんと想定通りの動きとなっています。 1つ前のコメントでも書いたようにcolor_arrayの内容が想定通り1,2,3のキーでできているか(console.logで出力)、ソースを組んだはずなのにできていないならキャッシュクリアをお試しください。
退会済みユーザー

退会済みユーザー

2017/09/05 04:38

jsonで1,2,3で配列を作った時どのように書きました?for (var i=1 ; i<=colors.length ; i++){ でvar i=1から始めればそのようにできると思ったのですがうまくいきませんでした。。。キャッシュクリアはもう試しました
m.ts10806

2017/09/05 04:56

1から始めるとcolorsの[1]から取得することになるので、結果、1,2の2つしかとれないはずです。 forのiはそのままでcolor_arrayに入れるときに+1すると良いです。 for (var i=0 ; i<=colors.length ; i++){ color_array[(i+1)] = { ←ここ "background-color" : colors[i]["background_color"], "h1" : colors[i]["h1_color"] , "p" : colors[i]["p_color"] , }; } }
退会済みユーザー

退会済みユーザー

2017/09/05 07:22

目的の挙動になりました!本当にありがとうございます!!
m.ts10806

2017/09/05 07:32

私も説明不足なところがあって何回もやりとりさせて申し訳なかったです。 何はともあれ解決したようで良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問