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

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

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

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

Webサイト

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

Python

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

HTML

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

Q&A

解決済

1回答

11262閲覧

Djangoでのページ遷移について

yk_ngt

総合スコア7

Django

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

Webサイト

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

Python

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

HTML

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

0グッド

0クリップ

投稿2018/03/22 08:02

前提・実現したいこと

現在、Python 3.6.3、Django 2.0.3でWEBサイトを作っているのですが、
ページ遷移が上手くいかないためご教授いただければ幸いです。

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

トップページからaタグで指定したページへ遷移したいのですが、aタグ内のhrefが何故かトップページにリンクされてしまいます。
色々試したところ、views.pyは問題なく、templateとurls.pyのパラメータの受け渡しが上手くいっていないのではないかと予想しています。

該当のソースコード

templateに配置したindex.htmlの中身。 <a class="a_more" href="{% url 'new' %}"> >>もっと見る </a> ↓ ブラウザの「ページのソースを表示」から確認すると、リンク先が自分自身(index.html)になっており、 実際にクリックしても自分自身がリロードされるだけになってしまう。 <a class="a_more" href="/"> >>もっと見る </a>

ディレクトリの構造

必要な情報のみ抜粋しています。

mysite/ └ myapp   ├ templates    │  └ sp    │   ├─ base.html    │   ├─ index.html    │   └─ new.html    ├ urls.py    └ views.py

試したこと

views.pyの中は以下のように指定しています。

from django.shortcuts import render def index(request): return render(request, 'sp/index.html') def new(request): return render(request, 'sp/new.html')

また、urls.pyの中は以下のように指定しています。

from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('', views.new, name='new'), ] このindexとnewの順番を下記のように入れ替えると、今度はサイトを開いた時にnewがトップページとして開くようになりました。 ↓ urlpatterns = [ path('', views.new, name='new'), path('', views.index, name='index'), ]

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

Python 3.6.3
Django 2.0.3

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

pathの第一引数が同じになっているので、それを変更してみてください。

href="/"のaタグで遷移し、Djangoフレームワーク側にリクエストが届くと、フレームワーク側で"/"に対応するビューを探すためにurlpattsernsリストが参照されます。このときに見るのがpathの第一引数である、''の部分です。そして、一致したビューが実際に呼ばれます。リスト内を順番に見ていくため、最初にマッチしたビューが呼ばれます。順番を入れ替えた際にそのような挙動になるのは、このためです。

テンプレート側で{% url 'new' %}のようにすると、 これもurlpattsernsリストが参照されています。この際に参照されるのが第三引数のname='new'等の部分で、ここで一致したならば、第一引数の''部分が返され、href="/"のようになります。例えば第一引数が'new_page/'のようにしていたら、href="/new_page" のようになります。

例えば、/new でnewのviewが呼ばれるようにしてみるといかがですか。

python

1urlpatterns = [ 2 path('new/', views.new, name='new'), 3 path('', views.index, name='index'), 4]

投稿2018/03/22 10:22

編集2018/03/22 10:38
toritoritorina

総合スコア972

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

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

yk_ngt

2018/03/22 13:09

早速のご回答をありがとうございます。 ご教授いただいたように第一引数を指定したところ、無事にページ遷移できました! 第二引数や第三引数ばかり調べていたので第一引数を見落としておりました・・・ ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問