11
12

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 5 years have passed since last update.

python,djangoでのデータのhtmlへの表示方法。(関数編&汎用ビュー編)

Posted at

python,djangoでのhtmlへの表示方法。(関数編+汎用ビュー編)。
早速関数編からやっていきましょう!

まずは基本から。views.pyに以下のように書き込みます。

def 関数名(request):
    context = {
    'test':'これはテストです'
    }
    return render(request, 'アプリケーション名':html名.html', context)

html部分に

{{ test }}

urls.pyに

path('使用したいURL', view.関数名, name='使用したい名前'),

と書くとcontextリストの中のtestキーが呼び出され、valueである'これはテストです'という文字が表示されます。




でも実際にはmodels.pyからデータベースに保存されたデータを表示させるパターンが多いと思います。そんな方はこのように。

from .model import モデル名

def 関数名(request)
    context = {
        'test_list': モデル名.objects.all(),
    }
    return render(request, 'アプリケーション名':html名.html', context)


allにするとモデルに登録されているデータがすべて取り出されます。 ここでは説明を省きますが、filterを使って特定のデータだけ取り出すことも可能ですよ。
モデル名.objects.all(),


続いてはhtml側。
{% for test in test_list  %}
    {{ test.表示したいモデルのフィールド名 }}
{% endfor %}




分割して解説しましょうか。
models.pyからデータベースに保存されたデータが複数あった場合for文を使って1つずつ呼び出しましょうということ。
test_listにモデル名.object.all()が反映されていて、for test部分でそれと一つずつ取り出してるイメージ(を僕は持っています。)

{% for test in test_list  %}

{% endfor %}


testにモデルからのデータが一つずつ送られるわけですが、そのモデルのどのフィールドを表示した以下を以下の書き方で定義することができます。

    {{ test.表示したいモデルのフィールド名 }}

例えばモデルにtest_1,test_2,test_3というフィールドがあった場合。

{{ test.test_1 }}
{{ test.test_2 }}

と書くとtest_1フィールドのデータベースに保存されたデータが表示された後にtest_2が表示されますが、test_3は書いてないので表示はされません。



今までは関数でやってきましたが、汎用ビューで書き換えるとこうなります。
汎用ビューはクラスを使います。

from django.views import generic


    class クラス名(generic.ListView):
       template_name = 'アプリケーション名/使用したいhtml名.html'
            model = モデル名     

これだけ!!!!
これいつも思うけどすごいよね!!


urls.pyを
path('使用したいURL', views.クラス名.as_view(), name='使用したい名前'),

とすることを忘れないでくださいね。


ちなみにtemplateの名前なんですが
モデル名_list.html

という名前をhtmlにつけると

二行目のtemplate_name部分は無くても動作するので試してみてください。

    class クラス名(generic.ListView):
       template_name = 'アプリケーション名/使用したいhtml名.html'
            model = モデル名     




templateの中身は、

{% for 使用したい名前 in モデル名_list %}
{{ 使用したい名前.使用したいモデルのフィールド名 }}
{% endfor %}

で動作します。なにしろデフォルトでモデル名+_listが設定されていて、そのように記載すると色々指定が省略できるんですね。

11
12
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
11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?