#概要
djangoの値をhtmlに渡すために必要なviewsの書き方を調べてきたので、よければお役に立ててください。また、ある程度djangoを触ってる人向けに書いてあります。
#開発環境
Mac
djagno=3.2.1
python=3.9.1
#きっかけ
viewsからhtmlに値を渡す際に、querysetが表示されてしまって、なかなか自分の思い通りにならなかったので、忘備録兼、記事にしたいと思います。
#views.pyの書き方
まずは、関数での値の渡し方
()の中の数字はそれと同じものを指しています。
views.py
def hello(request):
hello(①) = "Hello World"
context = {
'hello'(②): hello(①)
}
return render(request, 'hello.html', context)
hello.html
<!DOC...
<body>
<h1>{{ hello(②) }}</h1>
</body>
このcontextというのに入れるのが基本系だと思います。また、辞書型で渡さないとエラーになってしまうため、このような書き方をしています。公式ドキュメント通りだとこの書き方だと思います。また、models.pyを作って、簡単にadmin.pyで表示、編集。それの値を受け取り、関数を使って、値を渡してみます。
admin.pyで保存したのは
id = 1 = Hello World
id = 2 = Goodbye World
の2つです。1つしか表示しない場合はfor文はいらないですが、せっかくなので、同時に紹介したいと思います。
models.py
class Greetings(models.Model):
greeting = models.CharField(max_length=20)
views.py
def greeting(request):
greetings = Greetings.objects.all()
context = {
'greetings'(①): greetings,
}
return render(request, 'greeting.html', context)
hello.html
{% for greeting(②) in greetings(①) %}
<h1>{{ greeting(②) }}</h1>
{% endfor %}
次は汎用ビューでの値の渡し方です。greeting.htmlの中身は上のものと一緒です。
models.py
class Greetings(models.Model):
greeting = models.CharField(max_length=20)
views.py
class GreetingView(TemplateView):
model = Greetings
template_name = 'greeting.html'
#この関数が、classからhtmlに値を渡すおまじないになります。2行目まではほとんど一緒だと思います。
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['greetings'] = Greetings.objects.all()
return context
こうすると、Hello World と GoodBye World が一緒に表示されます。
また、汎用ビューのDetailViewを使う際は、id毎に別々のgreetingを呼ぶことができます。
自分でも確認ができてよかったです。次は、modelのフィールドについて話してみようと思います。