08常用的模板标签和过滤器
技术交流QQ群:1027579432,欢迎你的加入!
本教程来源于B站杨仕航Django2.0开发视频教程,如需转载,必须注明来源!
1.继续搭建blog
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C5gHF1Xw-1588844675373)(https://upload-images.jianshu.io/upload_images/13407176-405bca405c42b4dc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
- 打开blog目录下的views.py文件,添加如下内容,实现通过url向服务器发送请求,服务器收到请求后进行响应,把结果显示到前端页面的功能。
from django.shortcuts import render_to_response, get_object_or_404 from .models import Blog # Create your views here.def blog_list(request):context = {}context['blogs'] = Blog.objects.all()return render_to_response('blog_list.html', context)def blog_detail(request, blog_pk):context = {}context['blog'] = get_object_or_404(Blog, pk=blog_pk)return render_to_response('blog_detail.html', context)
- 创建模板页面:打开blog目录,在目录下面创建templates文件夹,在该文件夹下创建blog_list.html和blog_detail.html两个文件(ps:按下英文状态的!后,再按下Tab键,可以快速创建HTML5代码骨架),文件具体内容如下所示:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>我的网站</title> </head> <body> <!-- blog_list.html --> <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->{% for blog in blogs %}<!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) --><h3>{{ blog.title }}</h3><p>{{ blog.content }}</p>{% endfor %} </body> </html><!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>{{ blog.title }}</title> </head> <body><!-- blog_detail.html --><h3>{{ blog.title }}</h3><p>{{ blog.content }}</p> </body> </html>
- 创建路由设置文件:打开blog目录,在目录下面创建urls.py文件,具体文件内容如下所示:
from django.urls import path from . import viewsurlpatterns = [# http:localhost:8000/blog/1path('<int:blog_pk>', views.blog_detail, name="blog_detail"), ]
- 打开mysite目录下的全局路由设置文件urls.py,在当中添加如下内容:
from django.contrib import admin from django.urls import include, path from blog.views import blog_listurlpatterns = [# 博客首页path('', blog_list, name="home"),path('admin/', admin.site.urls),path('blog/', include('blog.urls')),]
- 打开浏览器,在当中输入网站localhost:8000打开首页,显示如下页面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-38DQyA99-1588844675379)(https://upload-images.jianshu.io/upload_images/13407176-b3fbe661467511e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)] - 对上述首页进行前端页面优化,打开blog_list.html文件,添加如下内容后的文件内容:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>我的网站</title> </head> <body> <!-- blog_list.html --><div><a href="{% url 'home' %}"><h3>个人博客网站</h3></a></div><hr> <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->{% for blog in blogs %}<!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) --><a href="{% url 'blog_detail' blog.pk %}"><h3>{{ blog.title }}</h3></a><p>{{ blog.content }}</p>{% endfor %} </body> </html>
- 对博客详情页面进行前端页面优化,打开blog_detail.html文件,添加如下内容后的文件内容:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>{{ blog.title }}</title> </head> <body><!-- blog_detail.html --><div><a href="{% url 'home' %}"><h3>个人博客网站</h3></a></div><h3>{{ blog.title }}</h3><p>{{ blog.content }}</p> </body> </html>
- 对首页进行前端页面优化从而显示总共的博客数量,有两种方法可以实现。推荐方法1:打开blog_list.html文件,添加如下内容后的文件内容:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>我的网站</title> </head> <body> <!-- blog_list.html --><div><a href="{% url 'home' %}"><h3>个人博客网站</h3></a></div><hr><p>一共有{{ blogs|length }}篇博客</p><!-- 方法2:{{ blogs_count }} --> <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->{% for blog in blogs %}<!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) --><a href="{% url 'blog_detail' blog.pk %}"><h3>{{ blog.title }}</h3></a><p>{{ blog.content }}</p>{% endfor %} </body> </html>
- 对首页进行前端页面优化从而显示总共的博客数量,有两种方法可以实现。方法2:打开blog目录下的views.py文件,添加如下内容后的文件内容:
from django.shortcuts import render_to_response, get_object_or_404 from .models import Blog # Create your views here.def blog_list(request):context = {}context['blogs'] = Blog.objects.all()context['blogs_count'] = Blog.objects.all().count() # 统计总共的博客数量return render_to_response('blog_list.html', context)def blog_detail(request, blog_pk):context = {}context['blog'] = get_object_or_404(Blog, pk=blog_pk)return render_to_response('blog_detail.html', context)
- 当全部删除完所有博客后,对首页进行前端页面优化,给出相应的提示。打开blog_list.html文件,添加如下内容后的文件内容:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>我的网站</title> </head> <body> <!-- blog_list.html --><div><a href="{% url 'home' %}"><h3>个人博客网站</h3></a></div><hr> <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->{% for blog in blogs %}<!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) --><a href="{% url 'blog_detail' blog.pk %}"><h3>{{ blog.title }}</h3></a><p>{{ blog.content }}</p>{% empty %}<p>--暂无博客,敬请期待--</p>{% endfor %}<p>一共有{{ blogs|length }}篇博客</p> </body> </html>
- 当有长内容的博客内容时,对首页进行前端页面优化,只显示前面几行的内容。打开blog_list.html文件,添加如下内容后的文件内容:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>我的网站</title> </head> <body> <!-- blog_list.html --><div><a href="{% url 'home' %}"><h3>个人博客网站</h3></a></div><hr> <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->{% for blog in blogs %}<!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) --><a href="{% url 'blog_detail' blog.pk %}"><h3>{{ blog.title }}</h3></a><p>{{ blog.content|truncatechars:30 }}</p> # |表示过滤器,{{ blog.content|truncatechars:30 }}表示只显示博客内容的前30个字{% empty %}<p>--暂无博客,敬请期待--</p>{% endfor %}<p>一共有{{ blogs|length }}篇博客</p> </body> </html>
- 打开博客详情页面内容文件blog_detail.html,添加作者信息等内容后的文件内容:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>{{ blog.title }}</title> </head> <body><!-- blog_detail.html --><div><a href="{% url 'home' %}"><h3>个人博客网站</h3></a></div><h3>{{ blog.title }}</h3><p>作者: {{ blog.author }}</p><p>发表日期: {{ blog.created_time|date:"Y-m-d G:i:s"}}</p><p>分类: {{ blog.blog_type }}</p><p>{{ blog.content }}</p> </body> </html>
- 关于网页显示时间与中国时间相差8小时的处理方法见该链接https://www.cnblogs.com/fixdq/p/9887575.html。
- 需求:例如点击博客详情页面中显示的分类:随笔,可以将属于随笔类别的博客全部显示出来。首先打开blog文件下的urls.py文件,添加如下内容:
from django.urls import path from . import viewsurlpatterns = [# http:localhost:8000/blog/1path('<int:blog_pk>', views.blog_detail, name="blog_detail"),path('<int:blog_type_pk>', views.blogs_with_type, name="blogs_with_type"), ]
- 接着打开blog文件下的views.py文件,添加blogs_with_type处理方法如下所示:
from django.shortcuts import render_to_response, get_object_or_404 from .models import Blog, BlogType # Create your views here.def blog_list(request):context = {}context['blogs'] = Blog.objects.all()return render_to_response('blog_list.html', context)def blog_detail(request, blog_pk):context = {}context['blog'] = get_object_or_404(Blog, pk=blog_pk)return render_to_response('blog_detail.html', context)def blogs_with_type(request, blogs_with_type):context = {}blog_type = get_object_or_404(BlogType, pk=blogs_with_type)context['blogs'] = Blog.objects.filter(blog_type=blog_type)context['blog_type'] = blog_typereturn render_to_response('blogs_with_type.html', context)
- 然后根据上一步中的views.py文件可知,还需要创建模板页面。因此,打开blog文件夹下的templates文件目录,增加blogs_with_type.html文件。如下所示:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>{{ blog_type.type_name }}</title> </head> <body> <!-- blog_list.html --><div><a href="{% url 'home' %}"><h3>个人博客网站</h3></a></div><hr><h3>{{ blog_type.type_name }}</h3> <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->{% for blog in blogs %}<!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) --><a href="{% url 'blog_detail' blog.pk %}"><h3>{{ blog.title }}</h3></a><p>{{ blog.content|truncatechars:30 }}</p>{% empty %}<p>--暂无博客,敬请期待--</p>{% endfor %}<p>一共有{{ blogs|length }}篇博客</p> </body> </html>
- 同时,对blog_detail.html文件进行修改,修改部分如下:
<p>分类: {{ blog.blog_type }}</p> ---------------------- 修改为 -------------------------- <p>分类:<a href="{% url 'blogs_with_type' blog.blog_type.pk%} ">{{ blog.blog_type }}</a> </p>
- 点击博客详情页面分类:随笔,会出现如下错误。原因是由于blog文件目录下的urls.py文件中的路由设置有问题,因此对该文件下的内容进行修改,如下所示:
from django.urls import path from . import viewsurlpatterns = [# http:localhost:8000/blog/1path('<int:blog_pk>', views.blog_detail, name="blog_detail"),path('type/<int:blog_type_pk>', views.blogs_with_type, name="blogs_with_type"), # 增加一个type参数与上面一个路由进行区分 ]
- 点击博客详情页面分类:随笔,会继续出现上面的错误。原因是由于blog文件目录下的views.py文件中blogs_with_type()方法所传入的参数blogs_with_type名称不对,应该传入的参数名称为blog_type_pk。因此对该文件下的内容进行修改,如下所示:
def blogs_with_type(request, blog_type_pk):context = {}blog_type = get_object_or_404(BlogType, pk=blog_type_pk)context['blogs'] = Blog.objects.filter(blog_type=blog_type)context['blog_type'] = blog_typereturn render_to_response('blogs_with_type.html', context)
2.常用的模板标签
3.常用的过滤器
3.本节结果展示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MyFTjnFS-1588844675399)(https://upload-images.jianshu.io/upload_images/13407176-0188e312cd50c431.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
08常用的模板标签和过滤器相关推荐
- 【django】三、常用的模板标签和过滤器
文章目录 添加跳转方法 前端页面 访问某个博客url设置 访问主页url设置 添加博客总数的显示 判断为空,添加一条提示 长博客显示限制 过滤时间,添加显示字段 博客类跳转到标签的功能 常用的模板标签 ...
- django “如何”系列4:如何编写自定义模板标签和过滤器
django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...
- The Definitive Guide To Django 2 学习笔记(八) 第四章 模板 (四)基本的模板标签和过滤器...
标签 下面的部分概述了常见的Django标签. if/else {%if%} 标签 对一个变量值进行测试,如果结果为true,系统将会显示在{%if%} 和 {%endif%}之间的一切,看个例子: ...
- Django 2.1.3 文档-模板-内置标签和过滤器(tagfilter)
内置标签和过滤器 1.内置标签 一览 autoescape block comment csrf_token cycle debug extends filter(标签filter而不是过滤器filt ...
- Django内建模版标签和过滤器
第四章列出了许多的常用内建模板标签和过滤器.然而,Django自带了更多的内建模板标签及过滤器.这章附录列出了截止到编写本书时,Django所包含的各个内建模板标签和过滤器,但是,新的标签是会被定期地 ...
- Django模板自定义标签和过滤器,模板继承(extend),Django的模型层
上回精彩回顾 视图函数:request对象request.path 请求路径request.GET GET请求数据 QueryDict {}request.POST POST请求数据 QueryDic ...
- python-django_自定义标签和过滤器_模板的导入与继承_静态文件使用方式_inclusion_tag的用法
django 1. 自定义标签和过滤器 1. 自定义过滤器 -第一步:在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag-第二步:在 ...
- django中自定义标签和过滤器
django中自定义标签和过滤器 原文:http://www.cnblogs.com/MnCu8261/p/5934203.html 纪念如何填了半天的坑,红色重点 想要实现自定义标签和过滤器需要进行 ...
- 模板标签及模板的继承与引用
1.常用的模板标签 - 作用是什么:提供各种逻辑 view.py: def index(request): #模板标签 --常用标签 总结:语法 {% tag %} {% endtag %} {% t ...
最新文章
- Tensorflow Day17 Sparse Autoencoder
- Android解决ScrollView中的滑动效果导致GestureDetector中的OnFling不能正常工作问题
- 获取iOS任意线程调用堆栈(二)符号化理论:Mach-o文件结构
- 基于android新闻阅读器,Readian News是一款基于Android和网络的新闻阅读器,可让您掌控一切...
- 国家邮政局:9月份全国快递服务企业业务收入完成921.4亿元,同比增长11.8%
- 《android基于andFix的热修复方案》思路篇
- 能在ARC下跑的ASIHTTPRequest框架(以及升了5.0,用了ARC后N多开源框架不能用的解决方案) .
- gromacs 安装_GROMACS:粗粒化力场建立和模拟上线!
- 定制家具设计拆单用什么软件好?
- 阿拉丁指数丨《2021 年度小程序互联网发展白皮书》4.5 亿+DAU 小程序的 6 大发展趋势
- 深圳地方坐标系转WGS84坐标系
- 【Arduino】步进电机驱动程序Stepper_Motor_TB6600
- bugzilla perl mysql apache windows,windows下配置bugzilla
- vagrant 强制关机 Warning: Authentication failure. Retrying...
- pdf转换器免费版哪种好用:Aiseesoft PDF Converter Ultimate | 无损转word转Excel转PPT转图片啥都行!!!
- 英伟达创始人出生 | 历史上的今天
- 基于PLC的实验室设备远程监控方案
- windows远程提示credssp加密数据库修正问题解决
- win11 某个任务栏图标显示空白解决方法
- Windows系统怎么使用TeamViewer打印
热门文章
- VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】
- 开源 java CMS - FreeCMS2.8 模板管理
- 第13章代码《跟老男孩学习Linux运维:Shell编程实战》
- hibernate多个主键
- MCSE2003学习之六
- 优雅地处理重复请求(并发请求)
- 某程序员吐槽:前端开发被哄抢,专科学历能进大厂;客户端开发找工作难如登天,985本硕拿不到一个offer!...
- Redis 击穿、穿透、雪崩产生原因以及解决思路
- DevOps 的发展史
- 敏感数据,“一键脱敏”,Sharding Sphere 完美搞定