6 功能4:文章详情页

1、文章详情页的设计

    # 文章详情页
    re_path(r'^(?P<username>\w+)/articles/(?P<article_id>\d+)$', views.article_detail, name='article_detail'),

2、文章详情页的数据构建

def article_detail(request, username, article_id):
    """文章详情页"""

    user_obj = models.UserInfo.objects.filter(username=username).first()
    blog = user_obj.blog        # 查询当前站点对象
    article_list = models.Article.objects.filter(user=user_obj)
    cate_list = models.Category.objects.filter(blog=blog).values('pk').annotate(c=Count("article__title")).values_list("title", 'c')
    tag_list = models.Tag.objects.filter(blog=blog).values('pk').annotate(c=Count('article')).values_list('title','c')
    date_list = models.Article.objects.filter(user=user_obj).extra(select={'y_m_date':"date_format(create_time,'%%Y-%%m')"}).values('y_m_date').annotate(c=Count('nid')).values_list('y_m_date', 'c')

    return render(request,'blog/article_detail.html',{"username":username,'blog':blog,'article_list':article_list,"tag_list":tag_list,"date_list":date_list, "cate_list":cate_list})

1、解决复用问题:方式1:封装函数

3、解决复用问题:方式2:inclution_tag  自定义tag

1、自定义的simple_tag

 

2.inclution_tag 

 

# -*- coding: utf-8 -*-
# @Time    : 2018/08/04 0004 22:03
# @Author  : Venicid

from django import template
from django.db.models import Count
from blog import models

register = template.Library()


@register.simple_tag
def multi_tag(x,y):

    return x*y


@register.inclusion_tag("blog/classification.html")
def get_classification_style(username):

    user_obj = models.UserInfo.objects.filter(username=username).first()
    blog = user_obj.blog
    cate_list = models.Category.objects.filter(blog=blog).values('pk').annotate(c=Count("article__title")).values_list("title", 'c')
    tag_list = models.Tag.objects.filter(blog=blog).values('pk').annotate(c=Count('article')).values_list('title','c')
    date_list = models.Article.objects.filter(user=user_obj).extra(select={'y_m_date':"date_format(create_time,'%%Y-%%m')"}).values('y_m_date').annotate(c=Count('nid')).values_list('y_m_date', 'c')

    return {'blog':blog,"tag_list":tag_list,"date_list":date_list, "cate_list":cate_list}

4、标签字符串转义

def article_detail(request, username, article_id):
    """文章详情页"""
    user_obj = models.UserInfo.objects.filter(username=username).first()
    blog = user_obj.blog
    # article_id对应的文章
    article_obj = models.Article.objects.filter(pk=article_id).first()

    return render(request,'blog/article_detail.html',locals())

1、字符串转义

 

2、防止xss攻击

 

4

5

6

7

8

9

  

猜你喜欢

转载自www.cnblogs.com/venicid/p/9420513.html