English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Django グローバルビュー

ある場合には、ビューのコードを書くのは非常に重労働です。たとえば、静的ページやリストページだけが必要な場合を想像してみましょう。Djangoは、これらのシンプルなビューを設定するための簡単な方法を提供しており、これを泛型ビューと呼びます。

従来のビューとは異なり、一般的なビューはクラスですが、関数を持っていません。Djangoはまた、django.views.genericと呼ばれる一般的なビューを提供しており、各一般的なビューはこれらのクラスのいずれかから派生しています。

有10+泛型クラス−

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
>>> import django.views.generic
 >>> dir(django.views.generic)
 ['ArchiveIndexView', 'CreateView', 'DateDetailView', 'DayArchiveView', 
    'DeleteView', 'DetailView', 'FormView', 'GenericViewError', 'ListView', 
    'MonthArchiveView', 'RedirectView', 'TemplateView', 'TodayArchiveView', 
    'UpdateView', 'View', 'WeekArchiveView', 'YearArchiveView', '__builtins__', 
    '__doc__', '__file__', '__name__', '__package__', '__path__', 'base', 'dates', 
    'detail', 'edit', 'list'

泛型ビューを使用できます。いくつかの例を見て、それがどのように動作するかを見てみましょう。

静的ウェブページ

「static.html」テンプレートから静的ページを公開しましょう。

私たちの static.html −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
<html>
    <body> 
       This is a static page!!! 
    </body>
 </html>

もしこれを行うと、以前学んだ方法で、myappを変更せざるを得なくなります。/views.py −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.shortcuts import render
 def static(request):
    return render(request, 'static.html', {})

myapp/urls.pyは以下のようになります −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views", url(r'^static/「static」, name='static'),)

最善の方法は、泛型ビューを使用することです。この点で、私たちのmyapp/views.pyは以下のようになります −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.views.generic import TemplateView
 class StaticView(TemplateView):
    template_name = "static.html"

そして、私たちのmyapp/urls.pyは以下のようになります −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from myapp.views import StaticView
 from django.conf.urls import patterns
 urlpatterns = patterns("myapp.views", (r'^static/、StaticView.as_view()),) ,StaticView.as_view()),)

アクセスしたときに /myapp/staticは以下になります −

同じ結果を得るために、以下の操作を実行することもできます −

views.pyファイルは変更しない必要はありません        url.pyファイルを変更します -    

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.views.generic import TemplateView
 from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views",
    url(r'^static/「TemplateView.as_view(template_name='static.html')),)

あなたが見たように、url.pyファイルの2番目のメソッドを変更するだけで十分です。

データベースからリストを取得し、データを表示する

Dreamrealモデルのすべてのエントリをリストアップする必要があります。ListViewの泛型ビュークラスを使用するのは簡単です。url.pyファイルを編集し、更新してください -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.views.generic import ListView
 from django.conf.urls import patterns, url
 urlpatterns = patterns(
    "myapp.views", url(r'^dreamreals/「ListView.as_view(model=Dreamreal, 
       template_name = "dreamreal_list.html")),
 )

ここでは、変数が泛型ビューからobject_listテンプレートに通ることに注意する必要があります。自分の名前を使いたい場合は、as_viewメソッドにcontext_object_nameパラメータを追加する必要があります。その後、url.pyが -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.views.generic import ListView
 from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views",
    url(r'^dreamreals/', ListView.as_view(
       template_name = "dreamreal_list.html")),
       model = Dreamreal, context_object_name = "dreamreals_objects",)

関連するテンプレートは以下のようになります -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
{% extends "main_template.html" %}
 {% block content %}
 Dreamreals:<p>
 {% for dr in object_list %}
 {{dr.name}}</p>
 {% endfor %}
 {% endblock %}

アクセス /myapp/dreamreals/ 以下のページが生成されます -