1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DjangoでviewsからHTML(templates)への値の渡し方

Last updated at Posted at 2021-05-08

#概要
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のフィールドについて話してみようと思います。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?