前提
djangoを用いてwebアプリの開発をしています。
実現したいこと
サンプルコードをもとにして問い合わせフォームを作っているのですが、テンプレートのHTMLのコードで理解できないところがあります。
発生している問題・エラーメッセージ
エラーはありません。このコードで起動すると問題ありません。しかしinquiry.html内の{% for field in form %}のform 、"{{ field.id_for_label}}"、{{ field.label_tag }、{{field}}がなぜforms.pyのクラスInquiryForm(forms.Form)の内容を示せているかがわかりません。formでなぜこのクラスの内容を示せるのでしょうか?そして.id_for_label、.label_tagはどこからきているのですか?
該当のソースコード
pyhton
1inquiry.html---------------------------------------------------- 2{% extends 'base.html'%} 3{% block title%} 4Antt Private Điary 5{% endblock %} 6{% block active_inquiry %}active{% endblock %} 7{% block contents%} 8<div class="container"> 9 <div class="my-div-style"> 10 <form method="post"> 11 {% csrf_token %} 12 {{ form.non_field_errors }} 13 {% for field in form %} 14 <div class="mb-4 col-8"> 15 <label for="{{ field.id_for_label}}" class="form-label"> 16 <strong>{{ field.label_tag }}</strong> 17 </label>{{field}} 18 {{ field.errors }} 19 </div> {% endfor %} 20 <button class="btn btn-primary" type="submit">1. 21 </button> 22 </form> 23 </div> 24</div> 25{% endblock%} 26forms.py------------------------------------------------------------------------- 27from django import forms 28from django.core.mail import EmailMessage 29class InquiryForm(forms.Form): 30 name = forms.CharField(label='お名前', max_length=30) 31 email = forms.EmailField(label='メールアドレス') 32 title = forms.CharField(label='タイトル', max_length=30) 33 message = forms.CharField(label='メッセージ',widget=forms.Textarea) 34 35 def __init__(self, *args, **kwargs): 36 super().__init__(*args, **kwargs) 37 self.fields['name'].widget.attrs['class'] = 'form-control' 38 self.fields['name'].widget.attrs['placeholder'] = 'お名前をここに入力してください。' 39 self.fields['email'].widget.attrs['class'] = 'formcontrol' 40 self.fields['email'].widget.attrs['placeholder'] = 'メールアドレスをここに入力してください。' 41 self.fields['title'].widget.attrs['class'] = 'formcontrol' 42 self.fields['title'].widget.attrs['placeholder'] = 'タイトルをここに入力してください。' 43 self.fields['message'].widget.attrs['class'] = 'form-control' 44 self.fields['message'].widget.attrs['placeholder'] = 'メッセージをここに入力してください' 45views.py-------------------------------------------------------------------------------------------------- 46from django.shortcuts import render 47import logging 48# Create your views here. 49from django.urls import reverse_lazy 50from django.views import generic 51from.forms import InquiryForm 52 53class IndexView(generic.TemplateView): 54 template_name="index.html" 55 56logger=logging.getLogger(__name__) 57class InquiryView(generic.FormView): 58 template_name="inquiry.html" 59 form_class = InquiryForm 60 61 62### 試したこと 63 64 65 66### 補足情報(FW/ツールのバージョンなど) 67 68

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/09/04 09:48