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

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

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

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4528閲覧

【django】【javascript】現在開いているページにリロードではなく再アクセスしたい

kureid

総合スコア3

Django

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/10/08 06:36

前提・実現したいこと

現在,djangoにてwebページを作成しています.
javascriptを組み込んで,自動的なページの遷移を実装したいと考えています.

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

javascriptにてurlを読み込ませ,http://127.0.0.1:8000/topに再アクセスさせようとしていますが,
urlがおかしくなってしまい,表示したいhttp://127.0.0.1:8000/topが表示できません.

Page not found (404) Request Method: GET Request URL: http://127.0.0.1:8000/top/%7B%25%20url%20'coloring:top'%20%25%7D //urlが~/topで終わらず,文字列が追加されてしまっている Using the URLconf defined in config.urls, Django tried these URL patterns, in this order: 1. admin/ 2. top/ [name='top'] The current path, top/{% url 'coloring:top' %}, didn't match any of these.

該当のソースコード

top.html

html

1{% extends 'coloring/base.html' %} 2{% load static %} 3{% block title %} top {% endblock title %} 4{% block h1 %} title {% endblock h1 %} {% block contents %} 5 6 7{% if first %} 8 <form method="POST"> 9 {% csrf_token %} 10 {{ form.as_p }} 11 <button type="submit" class="btn btn-primary">送信</button> 12 </form> 13{% else %} 14 <!--ここでjavascriptによってページの再アクセスを実行--> 15 <script type="text/javascript" src="{% static 'js/link_top.js' %}"></script> 16{% endif %} 17 18{% endblock contents %} 19

link_top.js

javascript

1window.location.href = "{% url 'coloring:top' %}";

試したこと

「django javascript url」や
「django javascript location.href」
などで検索をかけてみましたが,現在の自分の知識ではうまく活用できそうなものを見つけられませんでした.

不勉強ではありますが,ご助力いただければ幸いです.

補足情報(FW/ツールのバージョンなど)

iMac 10.15.6
python 3.8.2
django 3.1.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

回答

link_top.jsはJavaScriptの静的ファイルとして提供しているので、
Djangoのテンプレート処理を埋め込むことはそのままでは出来ません。

「JavaScript側で遷移させる」ことを前提とする場合だと、思い浮かぶ方法としては

  1. jsファイルを使わずにテンプレート側に直接スクリプトを埋め込み、そこで変数を使う。
  2. jsファイルでもともとの処理をする関数を定義して、引数として変数を渡す形式で関数を実行する。
  3. jsファイルもDjangoのviewsで作成する

あたりが挙げられそうです。

1の例

※該当部分の修正例の差分です

diff

1 <!--ここでjavascriptによってページの再アクセスを実行--> 2- <script type="text/javascript" src="{% static 'js/link_top.js' %}"></script> 3+ <script> 4+ window.location.href = "{% url 'coloring:top' %}"; 5+ </script>

2の例

※該当部分の修正例の差分です

diff

1 <!--ここでjavascriptによってページの再アクセスを実行--> 2 <script type="text/javascript" src="{% static 'js/link_top.js' %}"></script> 3+ <script> 4+ jump("{% url 'coloring:top' %}"); 5+ </script>

link_top.js

1function jump(link) { 2 windows.location.href = link'; 3}

蛇足

viewsの内容が質問に載ってないのでテンプレートを元にした感想なのですが、
firstがviews側で決定されているように見えました。
この場合だと、ブラウザで遷移する前に、viewsの段階でリダイレクトしたほうが良いとは思いました。

投稿2020/10/10 08:57

attakei

総合スコア2740

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

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

kureid

2020/10/10 09:59

ご回答いただきありがとうございます! ご教示いただいた1,2の方法でうまくページの遷移を実行することができました! attekei様の仰る通り,viewsでfirstを定義しているので,確かにviewsで遷移させた方が良かったですね.盲点でした. お忙しい中ご協力いただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問