此外,有问题的模型可以作为一个额外的参数传递到URLconf中。 Django通过通用视图来完成下面一些功能: 为单一的对象展示列表和一个详细页面。...这是通用视图在1.3发布中被重新设计的原因之一 - 之前,它们仅仅是一些函数视图加上 一列令人疑惑的选项;现在,比起传递大量的配置到URLconf中,更推荐的扩展通用视图的 方法是子类化它们,并且重写它们的属性或者方法...所有通用视图中有趣的特性来自于修改被传递到通用视图中的”信息” 字典。...DetailView通用视图提供了一个publisher对象给context,但是我们如何在模板中添加附加信息呢?...相当方便的是, ListView 有一个get_queryset() 方法来供我们重写。在之前,它只是返回一个queryset属性值,但是现在我们可以添加更多的逻辑。
, pub_date=timezone.now()) # 保存对象到数据库。 >>> q.save() # 输出也可能是1L,而不是1,取决于数据库。...给URL名字增加名称空间 在URLConf中添加名称空间,以便使用{% url %}模板标签时,django能区分不用应用的url。...类似的,ListView使用/_list.html模板。 对于ListView,自动生成context变量question_list。...自定义admin样式和感观 自定义项目模板 在项目目录中(包含manage.py文件)下创建template目录。...template可放在Django可访问的任何文件系统,但是保持模板在项目里,是需要好好遵守的约定。 编辑mysite/settings.py,在TEMPLATES设置中添加一个DIRS选项。
我们总是在底部添加新应用,因为Django会按顺序读取它们,并且我们希望内置的核心Django应用(例如admin和auth)在加载我们的应用之前已经被加载。...Models 在您的文本编辑器中,打开文件book / models.py并进行如下更新: # books/models.py from django.db import models class Book...然后,我们创建一个BookListView类,该类指定要使用的模型和模板(尚未创建)。 在拥有一个正常工作的网页之前,需要执行两个步骤:制作模板并配置URL。 让我们从URL开始。...Django由于某种原因在应用程序中默认不包含urls.py文件,因此我们需要自己创建它。 (library) $ touch books/urls.py 现在,在文本编辑器中更新新文件。...在此视图文件中,Book模型与ListView一起使用以列出所有书籍。 最后一步是创建我们的模板文件,以控制实际网页上的布局。 我们已经在视图中将其名称指定为book_list.html。
login/" TemplateView 显示Django HTML template 一般网站中使用模板显示的页 ListView 显示对象列表 文章列表页 DetailView 显示对象详情 文章详细页...属性: form_class:要实例化的Form类. success_url:表单成功处理后重定向到的URL. tamplate_name:字符串表示的模板名称....from django.views.generic import TemplateView,ListView from django.utils import timezone from django.views.generic.detail...这个变量会被传递给模板。...因为编辑和新增页面的前端代码基本一样,我们在这里都指定了template为update_form。也可指定不同的模板。另外也可用template_name_suffix参数去指定模板。
属性: form_class:要实例化的Form类. success_url:表单成功处理后重定向到的URL. tamplate_name:字符串表示的模板名称....方法: get_success_url():决定在表单成功验证后重定向到的URL,默认返回success_url. form_valid(form):在表单验证成功后调用该方法(注意并没有对数据进行操作...,ListView from django.utils import timezone from django.views.generic.detail import DetailView from...这个变量会被传递给模板。...因为编辑和新增页面的前端代码基本一样,我们在这里都指定了template为update_form。也可指定不同的模板。另外也可用template_name_suffix参数去指定模板。
context:模板的上下文对象(dict)request:请求对象using:模板引擎名称(如Jinja2)输入URLhtttp://127.0.0.1:8000/hello/render/str/URL...context:模板的上下文对象(dict)content_typ:MIME类型,默认为text/htmlstatus:HTTP状态码using:模板引擎名称(如Jinja2)输入URLhtttp://...static.serve处理静态文件在项目settings.py中添加配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR,'medias...:TemplateView步骤一:继承视图django.views.generic.TemplateView步骤二:配置模板地址步骤三:配置URL内置通用视图django.views.generic.ListView...列表类数据的封装,如:景点列表,支持分页django.views.generic.DetailView详情类数据的封装,如:景点详情输入URLhtttp://127.0.0.1:8000/hello/home
并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。 Django是一个基于MVC构造的框架。...但是在Django中,控制器接受用户输入的部分由框架自行处理,所以Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。...视图(View)表现层 处理与表相关的决定: 如何在页面或其他类型文档中进行显示。 模板(Template),业务逻辑层 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。...ListView和DetailView 4.2 使用dajngo自带的ListView v 编写app的views.py 4.3 使用django自带的DetailView 4.4 配置app的urls.py...4.5 启用django 访问admin后台 填充相关的信息 5.配置相关的模板 5.1 配置app的模板 1.把模板的index.html放到templates里面 2.模板的css,js,images
首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...ListView 在我们的博客应用中,有几个视图函数是从数据库中获取文章(Post)列表数据的: blog/views.py def index(request): # ......这个变量会被传递给模板。...在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。...这个方法返回的值是一个字典,这个字典就是模板变量字典,最终会被传递给模板。
在其内部,它主要还负责从数据库中获取数据、处理表单数据、保存数据到数据库、以及渲染指定的 HTML 模板等。...我们可以把这些操作逻辑写在一个直观的 Python 函数里,但是 Django 开发者们意识到很多视图函数中的逻辑代码都是重复和通用的,因此在较早的版本中,Django 便开始引入 Class-based...dates.py 主要存放用于按时间归档的类视图,如 ArchiveIndexView,一些视图在博客系统中非常有用,例如获取某个日期下的全部文章列表。...例如 ContextMixin 及其子类负责获取渲染模板所需的模板变量;MultipleObjectMixin 负责从数据库获取模型对应的多条数据;View 负责处理 HTTP 请求(如 get 请求,...不过在此之前,如果你还没有读过 Django 关于类视图的文档的话,建议先通读一遍,代码和实例相结合,才能更加直观地理解代码的工作原理。阅读地址:Class-based views。
在 使用 Django Pagination 实现简单的分页功能 中,我们实现了一个简单的分页导航效果。...首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。 于是 Django 把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图。...因此我们的思路是,在视图里将以上七步中所需要的数据生成,然后传递给模板在模板中渲染显示就行。整个视图的代码如下,代码实现的功能已有详细注释,就不在文章中进一步说明了。...在类视图中,这个需要传递的模板变量字典是通过 get_context_data 获得的, 所以我们复写该方法,以便我们能够自己再插入一些我们自定义的模板变量进去。...context 中 context.update(pagination_data) # 将更新后的 context 返回,以便 ListView 使用这个字典中的模板变量去渲染模板
上回说到,因为文章内容的数据类型是文本字段,文本字段只能输入字符,图片就不行了,当时我给出了两种方案——markdown 和富文本编辑器,我决定选择富文本编辑器,因为 Django 的富文本编辑器插件有很多...,在这很多个插件中,我决定选择django-ckeditor。...from django.shortcuts import render from django.views.generic import ListView from.models import Article...,也就是 html 文件,并把数据显示到 html 上面,打开 templates\index.html,编写如下所示的代码。...很明显的修改成功了,在编写其他代码之前我们先去测试这个富文本编辑器中的所有格式是否都可以被正常的显示,我们去增加一篇文章。 增加文章之后我们进入文章详情页面,看看是不是富文本可以正常显示,如图所示。
在本讲中,我们开始首页功能的开发,在开发过程中,大家将会学习到Django中的通用视图类、分页对象paginator以及foreignKey外键的使用。 效果演示 [16851ab0d057a5d6?...这里我们使用到了django中的内置标签,比如for语句、empty语句。这些都是django中非常常用的语句。在之后的教程中我们会经常遇到。...显示结果如下 [首页展示] 分类功能 在写分类功能之前,我们先学习一个回调函数 get_context_data() 这是ListView视图类中的一个函数,在 get_context_data() 函数中...,可以传一些额外内容到模板。...当数据传递给模板之后,模板就负责显示出来就行了。 因为分页功能比较常用,所以需要把它单独拿出来封装到一个单独的文件中,我们新建templates/base/page_nav.html文件。
Django源码学习-8-ListView 通用视图-续 ?...基于类的通用视图(以及任何继承了Django提供的基础类的基于类的视图)都能够以下面两种方式被配置:子类化,或者直接通过URLconf来传递参数。...当子类化一个类视图时,可以重写一些属性(比如template_name)或者 一些方法(比如 get_context_data)在子类中来提供一些新的值或者方 法。...class IndexView(TemplateView): template_name = "index.html" 需要添加这个新的视图到URLconf配置中。...IndexView urlpatterns = [ path('index/', IndexView.as_view()), ] 作为一个选择,如果仅仅修改类视图中少量简单的属性,可以直接传递新的属性到类本身调用
manage.py runserver $ python manage.py collectstatic 一般在urls.py中配置url,在models.py中配置model,在views.py中配置...Django中的一对多是在一中进行设置,这里对应于文章的分类,ForeignKey即数据库中的外键。...import markdown2 class IndexView(ListView): # template_name属性用于指定使用哪个模板进行渲染 template_name =...CategoryView,传递的参数在kwargs属性中获取 article_list = Article.objects.filter(category=self.kwargs['cate_id...target_article.blogcomment_set.all(), }) template {% for %}循环标签,{% if %}判断标签. {{ variable }}是一些非常常用的标签 在模板文件中我们可以这样使用
内置视图处理对象的定义 对于我们视图处理函数,从最原始的HttpResponse()来进行页面数据的输出,到render()函数进行模板页面的操作,已经是可以满足我们的需求了,但是Django赶脚还不够...,不够~所以提供了常规的一些页面视图对象对页面模板和模板中要展示的数据进行了封装处理。...常规情况下,对应页面中要展示数据列表的视图,通过继承Django的django.views.generic.ListView对象来实现,页面中要展示数据信息的视图,通过继承Django的django.views.generic.DetailView...我们可以在源代码中,看到各种操作的一些信息,官方注释用于使用对象数据来渲染详细信息页面的视图对象,继承的父类中,也定义了各种属性字段用于控制单个对象数据的展示操作 以上两个视图类,都间接继承了View...从基础文件view.py中,我们可以看到,各种视图模板的基础处理操作和视图类型的封装都有了简洁的定义,我们需要做的就是在项目中,继承这些Django已经封装好的对象,快捷的完成项目的开发。
所有的视图类继承自View类,它负责连接视图到URL、HTTP 方法调度和其它简单的功能。RedirectView用于简单的HTTP 重定向,TemplateView扩展基类来渲染模板。...在URLconf 中的简单用法 使用通用视图最简单的方法是在URLconf 中创建它们。...如果你只是修改基于类的视图的一些简单属性,你可以将它们直接传递给as_view()方法调用: from django.conf.urls import url from django.views.generic...我们在URLconf 中映射URL 到书籍列表视图: from django.conf.urls import url from books.views import BookListView urlpatterns...django.views.generic import ListView from books.models import Book class BookListView(ListView):
对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的:首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...ListView 在我们的博客应用中,有几个视图函数是从数据库中获取文章(Post)列表数据的: blog/views.py def index(request): # ......template_name:指定这个视图渲染的模板。 context_object_name:指定获取的模型列表数据保存的变量名,这个变量会被传递给模板。...在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。...最终传递给浏览器的 HTTP 响应就是 get 方法返回的 HttpResponse 对象。 还是无法理解么?在不涉及源码的情况下我也只能讲这么多了。
1)修改用户信息列表页面,在表的最后添加功能操作列,可以用来点击后编辑用户。 2)添加路由,获取指定用户数据到编辑表单中,获取数据通过视图页面开发。...>,大家注意,这个就是Django框架中由url传递给视图函数参数的一种方法。...url通过userID这个参数传递到视图函数getLjyUserByUserID,然后视图函数就可以根据这个用户编号去数据库中获取对应的用户对象了。...当获取用户抛出异常时,我们使用HttpResponse来输出一串文字说明,使得对异常的响应比较友好。 第4步:将获得的用户数据传入到模板页面显示出来。...模板控件中的文本和密码类型的,我们直接使用控件的value标签数据使得获得的用户数据填入,输出数据时与我们之前介绍的语法一样,使用{{变量}}的形式输出。
我们的之前在博客中使用了 Markdown 来为文章提供排版支持。Markdown 在渲染内容的同时还可以自动提取整个内容的目录结构,现在我们来使用 Markdown 为文章自动生成目录。...文本,然后传递给模板显示。...和之前的代码不同,在 get_object 方法中我们没有直接用 markdown.markdown() 方法来渲染 post.body 中的内容,而是先实例化了一个 markdown.Markdown...{{ post.toc }} 显示模板变量的值,注意 post.toc 实际是一段 HTML 代码,我们知道 Django 会对模板中的 HTML 代码进行转义,所以要使用 safe 标签防止 Django...和之前不同的是,extensions 中的 toc 拓展不再是字符串 markdown.extensions.toc ,而是 TocExtension 的实例。
文件中的ModelMyAdmin类中继续添加一个urls方法: from django.shortcuts import render def listview(self...文件的listview函数中调用方法,将page_html渲染到listview.html上: page_html = show_list.myPage_obj.ret_html...需求是:在自定制配置类根据list_display_links中的值,给相应的字段添加a标签,可以跳转到编辑页面上,而且不用再添加编辑列; 在默认配置类根据list_display_links...11、如何在自定制配置类/默认配置类中配置search_fields?...= self.get_add_url() # 将add_url渲染到页面 return render(request, "listview.html",
领取专属 10元无门槛券
手把手带您无忧上云