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

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

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

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

Python 3.x

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

Python

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

Q&A

解決済

1回答

12723閲覧

【Django】同じページに2つ以上の views を表示したい

ddd_

総合スコア32

Django

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

Python 3.x

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

Python

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

0グッド

3クリップ

投稿2018/01/08 19:28

###実現したいこと
Django で同じ URL のページに複数の views を適応させたい。

###現在の状況
webサイトの index ページに「メインブログA」と「ミニブログB」の両方を表示させたいが、一つ(読み込み順序の早い方)しか適応されない。

views.py を、

python

1def hoge_a(request): 2  post_a = MAIN_POST.objects.order_by('-published_date')[0] 3  return render(request, 'blog/index.html', {'post_a': post_a}) 4 5def hoge_b(request): 6  post_b = MINI_POST.objects.order_by('-published_date')[0] 7  return render(request, 'blog/index.html', {'post_b': post_b})

urls.py を、

python

1urlpatterns = [ 2 url(r'^$', views.hoge_a, name='hoge_a'), 3 url(r'^$', views.hoge_b, name='hoge_b'), 4]

おそらくどちら(views.py, urls.py)もまとめて記述するのではないかと思うのですが、どのように書けば実現できるでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

views.pyを

python

1def hoge_a(request): 2  post_a = MAIN_POST.objects.order_by('-published_date')[0] 3  post_b = MINI_POST.objects.order_by('-published_date')[0] 4  return render(request, 'blog/index.html', {'post_a': post_a, 'post_b': post_b})

としてください。
render()の第三引数ではテンプレートに渡すデータを自由に複数指定できます。
また、一度のリクエストで一つのview関数しか呼び出せません。
(ajax通信を行う場合は話が別ですが)

urls.pyも同様に1度のアクセスで1つのurl関数しか呼び出せません。
なので、

python

1urlpatterns = [ 2 url(r'^$', views.hoge_a, name='hoge_a'), 3]

としてください。

テンプレートblog/index.htmlの中身は不明ですが、
post_aとpost_bを使用していれば上記の書き方でどちらも表示されるはずです。

投稿2018/01/09 01:20

1ntegrale9

総合スコア98

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

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

ddd_

2018/01/09 04:39

ありがとうございます! Djangoが大好きなのですが、まだまだ手探りだったので、とても助かりました。おかげさまで期待する結果を得られました。親切に教えていただき、本当にありがとうございます。
uyuki

2020/12/09 17:02

急にコメントしてしまい申し訳ございません。 私も同じような内容で困っていたので、コメントさせていただきました。 ddd_さんは、post_a, pst_bのどちらも同じmodelのクラス(MAIN_POST)を継承していると思うのですが, 私は違うmodelのクラスを継承しようとし他のですが、うまく表示されません。その場合は、どのようなコードを書けばよろしいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問