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

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

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

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

Python 3.x

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

JavaScript

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

Q&A

解決済

1回答

1150閲覧

django、scriptタグの中に書いているpythonコードを書き換えたい

hiranohirano

総合スコア33

Django

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

Python 3.x

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

JavaScript

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

0グッド

0クリップ

投稿2019/04/08 07:39

選択した親カテゴリに合わせて子カテゴリを表示する機能を作っています。

以下のページを参考にしています。
Django、選択した親カテゴリに合わせて子カテゴリを表示

models.py

python

1class ParentCategory(models.Model): 2 name = models.CharField('親カテゴリ名', max_length=255) 3 4 def __str__(self): 5 return self.name 6 7 8class Category(models.Model): 9 name = models.CharField('カテゴリ名', max_length=255) 10 parent = models.ForeignKey(ParentCategory, verbose_name='親カテゴリ', on_delete=models.PROTECT) 11 12 def __str__(self): 13 return self.name

ビューで親カテゴリーの一覧を取得し、それをテンプレートに渡すようにしておきます。

views.py

python

1def get_context_data(self, **kwargs): 2 context = super().get_context_data(**kwargs) 3 context['parent_list'] = ParentCategory.objects.all() 4 return context

テンプレートに渡された'parent_list'を使って、html内に書いたscriptタグの中に以下を書き込みます。

html

1<script> 2const categories = { 3 {% for parent in parent_list %} 4 '{{ parent.pk }}': [ 5 {% for category in parent.category_set.all %} 6 { 7 'pk': '{{ category.pk }}', 8 'name': '{{ category.name }}' 9 }, 10 {% endfor %} 11 ], 12 {% endfor %} 13}; 14 15以下省略、、、 16

上記のconst categories の中に、{% for %}や{{ parent.pk }}といった書き方をしています。
chromeでは上記のままで動くのですが、IE11では構文エラーが出るため、javascriptだけで書きたいです。

javascriptにオブジェクトを渡す方法や、全く違うやり方など、何か良い方法はないでしょうか?
また、このままの書き方でも、IE11で動くようにする方法などがありましたら、ご教示いただきたいです。
宜しくお願い致します。

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

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

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

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

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

Lhankor_Mhy

2019/04/08 07:42

「IE11では構文エラーが出る」とありますが、具体的にはどのような JavaScript コードでどのようなエラーが出るのかご提示ください。
hiranohirano

2019/04/08 08:03

コンソールには、「SCRIPT1002: 構文エラーです。」と出ます。 エディターは、エラーを示す赤線だらけなのですが、 {% for parent in parent_list %}の一文で、 {%の部分に、「[js] Property assignment expected.」 forの部分に、「[js] Expression expected.」 parentの部分に、「[js] '(' expected.」 と出ます。
Lhankor_Mhy

2019/04/08 08:49

それはテンプレートのコードですよね? 実際にはレンダリングされたコードがクライアントに送信されていると思うので、それをご提示ください。一例で構いませんよ。
Lhankor_Mhy

2019/04/08 08:54

伝わりにくいですかね? 参考にしたページでいうと、 「まずcategories変数ですが、これはJavaScriptのオブジェクトを動的に作成しています。 実際には、以下のような中身になります。'親カテゴリのpk': [子カテゴリ1, 子カテゴリ2] といった内容ですね。」 の文の下に書かれているような形で、エラーの場所と内容と一緒にご提示ください、ということが言いたいのですが。
hiranohirano

2019/04/08 13:47

何を提示してよいのかわからなくて大変恐縮なのですが、、、 エラーの場所は、const categories = と書かれたところ。 エラーの内容は、構文エラー。 構文エラーになるのは、scriptタグの中に、{%%}のようなコードを書いているから。 だと思っているため、{%%}を使わないような方法でコードを書けたら、エラーがなくなるのではないかと思っているのですが、どうでしょうか。。
hiranohirano

2019/04/09 02:27

解決いたしました。私の勘違いのせいで、回答がつきませんでしたが、ご協力いただき感謝しています。ありがとうございました!
guest

回答1

0

自己解決

構文エラーが出ていて、scriptタグの中に、pythonコードを書いていることが原因だと思っていましたが、
IE非対応のコードを書いていたことが原因でした。

参考ページに書かれている以下のコードを
$('#id_parent_category').on('change', () => {

$(document).on('change','#id_parent_category', function() {
に変更したら直りました!

投稿2019/04/09 02:27

hiranohirano

総合スコア33

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問