ランダムおすすめ記事

ホームページ作りました

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

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が設定されていて、そのように記載すると色々指定が省略できるんですね。