6 功能4:文章详情页

Posted venicid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

  

以上是关于6 功能4:文章详情页的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot制作个人博客-详情页

的关注功能

Spring Boot制作个人博客-博客详情页

Django 项目试炼blog -- 文章详情页1 -- 点赞功能

web开发-Django博客系统

vue实现淘宝商品详情页属性选择功能