首先我们来介绍一下Django中的视图扩展类。视图扩展类是一种Django中预定义的类,我们可以继承这些类,使用这些类中已经实现的方法,来达到一些常见的功能。
常见的几种视图扩展类包括:TemplateView(模板视图)、ListView(列表视图)、DetailView(详细视图)、FormView(表单视图)等等。
接下来我们通过2个实例来学习这些视图扩展类的使用。
模板视图是用来展示一个简单的HTML页面的,可以简单地理解为一个纯展示页面的视图。
首先我们需要在urls.py文件中,将视图类对应到一个url上。比如,我们将一个URL地址和TemplateView对应起来,代码如下:
from django.urls import path
from django.views.generic import TemplateView
urlpatterns = [
path('about/', TemplateView.as_view(template_name='about.html'), name='about'),
]
这里我们使用了as_view()函数,将TemplateView转换成一个可调用的函数,然后使用它的template_name属性来告诉它展示的模板的名称。
接下来,我们编写一个about.html页面,该页面可以展示项目的相关信息,代码如下:
{% extends "base.html" %}
{% block content %}
<h1>About Us</h1>
<p>We are a team of developers who love creating amazing web applications.</p>
{% endblock %}
在这个页面中,我们定义了一些HTML代码,其中用到了base.html作为它的父模板,然后在该页面中展示了一些文字信息。
如果我们访问/about/这个网址,就可以看到这个页面中的信息了。
列表视图是用来展示一组内容的,通常是从数据库中提取出数据,然后使用ListView来渲染到页面上。我们可以继承ListView类来自定义一些属性和方法,以实现我们的需求。
在这个示例中,我们建立一个博客应用(blog),并且使用ListView展示所有的文章列表。我们需要在models.py文件中定义一个Article类,来存储文章的相关信息。
models.py代码如下:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
content = models.TextField()
published_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
在该模型中,我们定义有title、author、content和published_at等属性,这些属性将会被存储在数据库中。然后我们可以在views.py文件中定义ArticleListView类,继承ListView类,来展示Article模型中所有的文章列表:
views.py代码如下:
from django.views.generic import ListView
from .models import Article
class ArticleListView(ListView):
model = Article
template_name = 'article_list.html'
context_object_name = 'articles'
ordering = ['-published_at']
在这个类中,我们定义了一些属性,包括model(模型类)、template_name(模板名称)、context_object_name(上下文名称,用于传递文章列表到模板中)和ordering(排序方式)等等。这些属性将会在ListView中被使用。
最后,我们需要在urls.py文件中将这个类和一个URL地址对应起来。代码如下:
from django.urls import path
from .views import ArticleListView
urlpatterns = [
path('article_list/', ArticleListView.as_view(), name='article_list'),
]
这里我们将ArticleListView转换成一个可调用的函数,然后将URL地址/article_list/和这个函数对应起来。
最后,我们需要简单地编写一个article_list.html模板,用于展示所有的文章列表。代码如下:
{% extends "base.html" %}
{% block content %}
<h2>All Articles</h2>
{% for article in articles %}
<h3>{{ article.title }}</h3>
<h5>By {{ article.author }}, on {{ article.published_at|date:"F j, Y" }}</h5>
<div>{{ article.content }}</div>
{% empty %}
<p>No articles yet.</p>
{% endfor %}
{% endblock %}
在这个模板中,我们定义了一些HTML代码,用于展示文章列表中的每一个文章。我们使用了for循环来遍历所有的文章,然后在页面中展示文章的title、author、published_at和content等信息。
现在,我们可以访问/article_list/这个网址,来查看所有的文章列表了。
以上就是Django视图扩展类知识点详解的完整攻略,包括两条示例说明,希望对你有所帮助。
本文链接:http://task.lmcjl.com/news/16112.html