Django - Lượt xem Chung
Trong một số trường hợp, việc viết quan điểm, như chúng ta đã thấy trước đó thực sự nặng nề. Hãy tưởng tượng bạn cần một trang tĩnh hoặc một trang danh sách. Django cung cấp một cách dễ dàng để thiết lập các chế độ xem đơn giản được gọi là các chế độ xem chung.
Không giống như các khung nhìn cổ điển, các khung nhìn chung là các lớp không phải là các hàm. Django cung cấp một tập hợp các lớp cho các chế độ xem chung trong django.views.generic và mọi chế độ xem chung là một trong những lớp đó hoặc một lớp kế thừa từ một trong số chúng.
Có hơn 10 lớp chung chung -
>>> 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']
Điều này bạn có thể sử dụng cho chế độ xem chung của mình. Hãy xem một số ví dụ để xem nó hoạt động như thế nào.
Trang tĩnh
Hãy xuất bản một trang tĩnh từ mẫu “static.html”.
Static.html của chúng tôi -
<html>
<body>
This is a static page!!!
</body>
</html>
Nếu chúng ta làm điều đó theo cách chúng ta đã học trước đây, chúng ta sẽ phải thay đổi myapp/views.py trở thành -
from django.shortcuts import render
def static(request):
return render(request, 'static.html', {})
và myapp/urls.py trở thành -
from django.conf.urls import patterns, url
urlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)
Cách tốt nhất là sử dụng các chế độ xem chung chung. Vì vậy, myapp / views.py của chúng tôi sẽ trở thành -
from django.views.generic import TemplateView
class StaticView(TemplateView):
template_name = "static.html"
Và myapp / urls.py của chúng tôi, chúng tôi sẽ -
from myapp.views import StaticView
from django.conf.urls import patterns
urlpatterns = patterns("myapp.views", (r'^static/$', StaticView.as_view()),)
Khi truy cập / myapp / static, bạn nhận được -
Để có kết quả tương tự, chúng ta cũng có thể làm như sau:
- Không có thay đổi trong views.py
- Thay đổi tệp url.py thành -
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')),)
Như bạn thấy, bạn chỉ cần thay đổi tệp url.py trong phương pháp thứ hai.
Liệt kê và Hiển thị Dữ liệu từ DB
Chúng tôi sẽ liệt kê tất cả các mục trong mô hình Dreamreal của chúng tôi. Làm như vậy được thực hiện dễ dàng bằng cách sử dụng lớp dạng xem chung ListView. Chỉnh sửa tệp url.py và cập nhật nó thành -
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")),
)
Điều quan trọng cần lưu ý tại thời điểm này là biến chuyển qua chế độ xem chung cho mẫu là object_list. Nếu bạn muốn tự đặt tên cho nó, bạn sẽ cần thêm đối số context_object_name vào phương thức as_view. Sau đó, url.py sẽ trở thành -
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” ,)
Sau đó, mẫu được liên kết sẽ là -
{% extends "main_template.html" %}
{% block content %}
Dreamreals:<p>
{% for dr in object_list %}
{{dr.name}}</p>
{% endfor %}
{% endblock %}
Truy cập / myapp / dreamreals / sẽ tạo ra trang sau: