表題の件に関してですが、project/app02/view.pyにて
from django.shortcuts import render
def index(request):
context = {'lists': ["データ1", "データ2", "データ3"]}
return render(request, 'index.html', context)
とし、project/templates/app/index.htmlにて
{% for list in lists %}
<input type="checkbox" name="email" value="{{email}}" /> {{list}}<br />
{% endfor %}
と書いている状況です。
http://127.0.0.1:8000/app02/にアクセスすると何も表示されません。
terminalにもエラーの表示はなされません。
どのようにすればチェックボックスが表示されるのでしょうか?
ファイル構造は
project
│ db.sqlite3
│ manage.py
│
├─AppSelect
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ __init__.py
│ │
│ ├─migrations
│ │ │ __init__.py
│ │ │
│ │ └─__pycache__
│ │ __init__.cpython-36.pyc
│ │
│ └─__pycache__
│ admin.cpython-36.pyc
│ models.cpython-36.pyc
│ urls.cpython-36.pyc
│ views.cpython-36.pyc
│ __init__.cpython-36.pyc
│
├─config
│ │ settings.py
│ │ urls.py
│ │ wsgi.py
│ │ __init__.py
│ │
│ └─__pycache__
│ settings.cpython-36.pyc
│ urls.cpython-36.pyc
│ wsgi.cpython-36.pyc
│ __init__.cpython-36.pyc
│
├─app01
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ └─migrations
│ __init__.py
│
├─app02
│ │ admin.py
│ │ apps.py
│ │ forms.py
│ │ models.py
│ │ tests.py
│ │ urls.py
│ │ views.py
│ │ widgets.py
│ │ __init__.py
│ │
│ ├─migrations
│ │ │ __init__.py
│ │ │
│ │ └─__pycache__
│ │ __init__.cpython-36.pyc
│ │
│ └─__pycache__
│ admin.cpython-36.pyc
│ forms.cpython-36.pyc
│ models.cpython-36.pyc
│ urls.cpython-36.pyc
│ views.cpython-36.pyc
│ __init__.cpython-36.pyc
│
├─static
│ └─app02
│ └─images
│ sample.jpg
│
└─templates
│ base.html
│
├─AppSelect
│ index.html
│
└─app02
index.html
としております。
urls.pyはconfig, AppSelect, app02それぞれにおいて(app01は何も記述してありません)
config/urls.py
from django.contrib import admin
from django.urls import path, include
from django.views.generic import RedirectView
urlpatterns = [
path('admin/', admin.site.urls),
path('AppSelect/', include('AppSelect.urls')), # URLがAppSelect/なら、AppSelectアプリ内のurls.pyを参照する
path('app02/', include('app02.urls')),
path('',RedirectView.as_view(url='/AppSelect/')), # URLが''なら(topディレクトリへのアクセス)はAppSelectに直接飛ぶ(redirectする)ようにしておく
]
AppSelect/urls.py
rom django.urls import path
from django.views.generic import TemplateView
urlpatterns = [
path('', TemplateView.as_view(template_name='AppSelect/index.html'), name='index'),
]
app02/urls.py
from django.contrib import admin
from django.urls import path
from django.views.generic import TemplateView
from . import views
urlpatterns = [
#TemplateViewを使ってTOPページ(index.html)を定義
path('', TemplateView.as_view(template_name='app02/index.html'), name='index'),
]
としてあります。
どうぞよろしくお願いいたします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
質問にでている情報
project/template/app/index.htmlにて
のうち、app/index.html
の部分を信頼するなら(template
はtemplates
の単純な写し間違いだとするなら)
誤
return render(request, 'index.html', context)
正
return render(request, 'app/index.html', context)
ですね。
エラーになってないなら、project/templates/index.html
が存在してしまっているのかな、と思いました。
まずテンプレートの探索が正しいかを確認したいですね。
{% for list in lists %}
<input type="checkbox" name="email" value="{{email}}" /> {{list}}<br />
{% endfor %}
の上、テンプレートのできるだけ冒頭に、何か文字を入れて表示されるかどうかを確認しましょう。
それが表示されるようならテンプレートの別の部分の問題でしょう(このforループが実行されてない、というような)。
表示されないようなら、
次はdef index(request):
が本当に呼ばれているかを確認したいです。
def index(request):
raise RuntimeError('本当にindexが呼ばれてる')
とかしてエラーが出ることを確認しましょう。
TemplateView
は
def index(request):
return render(request, 'some_app/index.html')
のような中身がないお決まりのビュー関数を書いて
path('', some_app.index, name='index'),
と書かずに済むためのものなので、(本当はもっと機能があるのでしょうけれどそれはおいておいて)
TemplateView.as_view
で呼び出すように書いたらindex
が呼ばれることはないですね。呼び出さない設定を書いているわけですから。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.32%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2020/02/26 11:17
templatesの写し間違いでした。
また、app/views.pyを
def index(request):
context = {'lists': ["データ1", "データ2", "データ3"]}
return render(request, 'app/index.html', context)
としたのですが、いまだに画面には何も表示されません。
すみません。いかがでしょうか。
2020/02/26 11:50
テンプレートにただのチェックボックスを作る文を記述しました。
<input type="checkbox" name="tags" value="1" id="id_tags_0">
<label for="id_tags_0">Python</label>
結果、ブラウザにチェックボックスが表示されました。
>次はdef index(request):が本当に呼ばれているかを確認したいです。
viewsの記述をお示しいただいたとおり変更しました。
def index(request):
raise RuntimeError('本当にindexが呼ばれてる')
結果、ブラウザにもターミナルにもエラーは出ませんでした。
def index():が呼ばれていないようです。。。
2020/02/26 12:22
質問に挙げられたdef index **以外** のメソッドから、質問に挙げられたテンプレートが読み出されている
という可能性が最も高いわけですね。
プロジェクトの中に最低2つ urls.py があると思うのでそちらが意図通りか見ましょう。
分からないようであれば、ディレクトリ名を含めて質問を編集してurls.pyを書いてみてください。その場合はもうちょっと全体のディレクトリ構造が分かるようにしてもらえるとよいかと。
2020/02/26 14:05
urls.pyの設定がまちがっているでしょうか?
ご確認のほどお願いいたします。
2020/02/26 14:25
TemplateView.as_view は「そのテンプレートのファイルを出力しろ」っていうことですから……。
2020/02/26 14:54
全く意図通りのコードがかけておりませんでした。お教えいただきありがとうございます。