首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django学习_简易博客(六)

Django学习_简易博客(六)

作者头像
zx钟
发布2019-07-18 10:35:59
3470
发布2019-07-18 10:35:59
举报
文章被收录于专栏:测试游记测试游记

创建自定义模版标签

  • simple_tag 处理数据并返回一个字符串
  • inclusion_tag 处理数据并返回所显示的模版

每个模版标签模块都需要定义一个register变量作为有效的标签库。

blog/templatetags/blog_tags.py

from django import template
from ..models import Post
from django.db.models import Count
from django.utils.safestring import mark_safe
import markdown

register = template.Library()


@register.simple_tag #注册为简单的标签
def total_posts():
    return Post.published.count()


@register.inclusion_tag('blog/post/latest_posts.html')
def show_latest_posts(count=5):
    latest_posts = Post.published.order_by('-publish')[:count]
    return {'latest_posts': latest_posts}


@register.simple_tag
def get_most_commented_posts(count=5):
    return Post.published.annotate(
        total_comments=Count('comments')
    ).order_by('-total_comments')[:count]


@register.filter(name='markdown')
def markdown_format(text):
    return mark_safe(markdown.markdown(text))

blog/post/latest_posts.html

<ul>
    {% for post in latest_posts %}
        <li>
            <a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
        </li>
    {% endfor %}
</ul>

使用标签

  • 在html文件上使用total_posts
{% load blog_tags %}
<p>This is my blog. I`ve written {% total_posts %} posts so far.</p>

效果

  • 在html文件上使用show_latest_posts
<h3>Latest posts</h3>
{% show_latest_posts 3 %}

效果

  • 在html文件上使用get_most_commented_posts
<h3>Most commented posts</h3>
{% get_most_commented_posts as most_commented_posts %}
<ul>
    {% for post in most_commented_posts %}
        <li>
            <a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
        </li>
    {% endfor %}
</ul>

效果

整体

整体

创建自定义模版过滤器

$ pip install Markdown==2.6.11

在博客内使用Markdown语法

@register.filter(name='markdown')
def markdown_format(text):
    return mark_safe(markdown.markdown(text))
{{ post.body|truncatewords:30|linebreaks }}
替换为
{{ post.body|markdown|truncatewords_html:30 }}

{{ post.body|linebreaks }}
替换为
{{ post.body|markdown }}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建自定义模版标签
    • 使用标签
      • 整体
  • 创建自定义模版过滤器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档