前提
Djangoで入力フォームを作ろうと考えています.
「Python Django3 超入門」と「動かして学ぶ Python Django開発入門 第2版」の2冊を基に
入力フォームに入力するとフォームの上側に確認画面が出来るようにしたいです.
ですが下記のエラーが出てしまい入力フォームが表示できません.
1つ目の本のサンプル(myapp)と2つ目の本のサンプル(hello)を同じプロジェクト内に作っています.
settings.pyでtemplateの設定はしているのですが正確に表示されません.
どのようにしたら入力フォームが表示できるようになるでしょうか.
発生している問題・エラーメッセージ
TemplateDoesNotExist at
該当のソースコード
views.py
1from django.shortcuts import render 2from django.urls import reverse_lazy 3from django.http import HttpResponse 4 5from django.views import generic 6from django.views.generic import TemplateView 7from .forms import InquiryForm 8 9 10class IndexView(generic.TemplateView): 11 template_name = "index.html" 12 13 14class InquiryView(TemplateView): 15 template_name = "myapp/inquiry.html" 16 17 def __init__(self): 18 self.params = { 19 'message': 'your data', 20 'form': InquiryForm() 21 } 22 23 def get(self, request): 24 **return render(request, 'myapp/inquiry.html' , self.params)** 25 26 def post(self, request): 27 msg = 'name、<b>' + request.POST['name'] + 'email </b>' + request.POST['email'] + \ 28 'title <b>' + request.POST['title'] + '</b> message' + request.POST['message'] 29 self.params['message'] = msg 30 self.params['form'] = InquiryForm(request.POST) 31 return render(request, 'myapp/inquiry.html' , self.params)
urls.py
1from django.urls import path 2 3from . import views 4from .views import InquiryView 5 6 7app_name = 'myapp' 8urlpatterns = [ 9 path('', views.IndexView.as_view(), name="index"), 10 path(r'inquiry/',views.InquiryView.as_view(),name="inquiry"), 11 12] 13
forms.py
1from django import forms 2 3 4class InquiryForm(forms.Form): 5 name = forms.CharField(label='お名前', max_length=30) 6 email = forms.EmailField(label='メールアドレス') 7 title = forms.CharField(label='タイトル', max_length=30) 8 message = forms.CharField(label='メッセージ', widget=forms.Textarea) 9 10 def __init__(self, *args, **kwargs): 11 super().__init__(*args, **kwargs) 12 13 self.fields['name'].widget.attrs['class'] = 'form-control' 14 self.fields['name'].widget.attrs['placeholder'] = 'お名前をここに入力してください。' 15 16 self.fields['email'].widget.attrs['class'] = 'form-control' 17 self.fields['email'].widget.attrs['placeholder'] = 'メールアドレスをここに入力してください。' 18 19 self.fields['title'].widget.attrs['class'] = 'form-control' 20 self.fields['title'].widget.attrs['placeholder'] = 'タイトルをここに入力してください。' 21 22 self.fields['message'].widget.attrs['class'] = 'form-control' 23 self.fields['message'].widget.attrs['placeholder'] = 'メッセージをここに入力してください。' 24
inquiry.html
1{% extends 'base.html' %} 2 3{% block title %}お問い合わせ | Private Diary{% endblock %} 4 5{% block active_inquiry %}active{% endblock %} 6 7 8{% block contents %} 9<div class="container"> 10 <div class="my-div-style"> 11 <h1 class="display-4 text-primary">{{title}}</h1> 12 <p class="h5 mt-4">{{message|safe}}</p> 13 <form action="{% url 'inquiry' %}" method="post"> 14 {% csrf_token %} 15 16 {{ form.non_field_errors }} 17 18 {% for field in form %} 19 <div class="mb-4 col-8"> 20 <label for="{{ field.id_for_label }}" class="form-label"> 21 <strong>{{ field.label_tag }}</strong> 22 </label> 23 {{ field }} 24 {{ field.errors }} 25 </div> 26 27 {% endfor %} 28 <input type="submit" class="btn btn-primary " value="click"> 29 30 </form> 31 32 </div> 33</div> 34{% endblock %}
試したこと
https://freeheroblog.com/template-settings/
https://udomomo.hatenablog.com/entry/2018/08/14/234153
上記のサイトを参考にしてSettings.pyをいじったりしても出てきました.
2つのアプリごとにSettings.pyにTemplatesを設定しなければいけないのかも分かりません.
補足情報(FW/ツールのバージョンなど)
・Windows10
・Django4.1.3
・Python3.10.8
・xampp
あなたの回答
tips
プレビュー