技术交流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常用的模板标签和过滤器相关推荐

  1. 【django】三、常用的模板标签和过滤器

    文章目录 添加跳转方法 前端页面 访问某个博客url设置 访问主页url设置 添加博客总数的显示 判断为空,添加一条提示 长博客显示限制 过滤时间,添加显示字段 博客类跳转到标签的功能 常用的模板标签 ...

  2. django “如何”系列4:如何编写自定义模板标签和过滤器

    django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...

  3. The Definitive Guide To Django 2 学习笔记(八) 第四章 模板 (四)基本的模板标签和过滤器...

    标签 下面的部分概述了常见的Django标签. if/else {%if%} 标签 对一个变量值进行测试,如果结果为true,系统将会显示在{%if%} 和 {%endif%}之间的一切,看个例子: ...

  4. Django 2.1.3 文档-模板-内置标签和过滤器(tagfilter)

    内置标签和过滤器 1.内置标签 一览 autoescape block comment csrf_token cycle debug extends filter(标签filter而不是过滤器filt ...

  5. Django内建模版标签和过滤器

    第四章列出了许多的常用内建模板标签和过滤器.然而,Django自带了更多的内建模板标签及过滤器.这章附录列出了截止到编写本书时,Django所包含的各个内建模板标签和过滤器,但是,新的标签是会被定期地 ...

  6. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数:request对象request.path 请求路径request.GET GET请求数据 QueryDict {}request.POST POST请求数据 QueryDic ...

  7. python-django_自定义标签和过滤器_模板的导入与继承_静态文件使用方式_inclusion_tag的用法

    django 1. 自定义标签和过滤器 1. 自定义过滤器 -第一步:在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag-第二步:在 ...

  8. django中自定义标签和过滤器

    django中自定义标签和过滤器 原文:http://www.cnblogs.com/MnCu8261/p/5934203.html 纪念如何填了半天的坑,红色重点 想要实现自定义标签和过滤器需要进行 ...

  9. 模板标签及模板的继承与引用

    1.常用的模板标签 - 作用是什么:提供各种逻辑 view.py: def index(request): #模板标签 --常用标签 总结:语法 {% tag %} {% endtag %} {% t ...

最新文章

  1. Tensorflow Day17 Sparse Autoencoder
  2. Android解决ScrollView中的滑动效果导致GestureDetector中的OnFling不能正常工作问题
  3. 获取iOS任意线程调用堆栈(二)符号化理论:Mach-o文件结构
  4. 基于android新闻阅读器,Readian News是一款基于Android和网络的新闻阅读器,可让您掌控一切...
  5. 国家邮政局:9月份全国快递服务企业业务收入完成921.4亿元,同比增长11.8%
  6. 《android基于andFix的热修复方案》思路篇
  7. 能在ARC下跑的ASIHTTPRequest框架(以及升了5.0,用了ARC后N多开源框架不能用的解决方案) .
  8. gromacs 安装_GROMACS:粗粒化力场建立和模拟上线!
  9. 定制家具设计拆单用什么软件好?
  10. 阿拉丁指数丨《2021 年度小程序互联网发展白皮书》4.5 亿+DAU 小程序的 6 大发展趋势
  11. 深圳地方坐标系转WGS84坐标系
  12. 【Arduino】步进电机驱动程序Stepper_Motor_TB6600
  13. bugzilla perl mysql apache windows,windows下配置bugzilla
  14. vagrant 强制关机 Warning: Authentication failure. Retrying...
  15. pdf转换器免费版哪种好用:Aiseesoft PDF Converter Ultimate | 无损转word转Excel转PPT转图片啥都行!!!
  16. 英伟达创始人出生 | 历史上的今天
  17. 基于PLC的实验室设备远程监控方案
  18. windows远程提示credssp加密数据库修正问题解决
  19. win11 某个任务栏图标显示空白解决方法
  20. Windows系统怎么使用TeamViewer打印

热门文章

  1. VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】
  2. 开源 java CMS - FreeCMS2.8 模板管理
  3. 第13章代码《跟老男孩学习Linux运维:Shell编程实战》
  4. hibernate多个主键
  5. MCSE2003学习之六
  6. 优雅地处理重复请求(并发请求)
  7. 某程序员吐槽:前端开发被哄抢,专科学历能进大厂;客户端开发找工作难如登天,985本硕拿不到一个offer!...
  8. Redis 击穿、穿透、雪崩产生原因以及解决思路
  9. DevOps 的发展史
  10. 敏感数据,“一键脱敏”,Sharding Sphere 完美搞定