一、文章详细页

文章详细页:
1.链接:
<div><h5><a href="/blog/{{ article.user.username }}/articles/{{ article.pk }}">{{ article.title }}</a></h5></div>
2.url分配:
re_path('(?P<username>\w+)/articles/(?P<article_id>\d+)/$',views.article_detail),
# 注意放在上面,否则下面得会覆盖上面得!
re_path('(?P<username>\w+)/articles/(?P<article_id>\d+)/$',views.article_detail),
re_path('(?P<username>\w+)/$',views.homesite)
3.模板继承:
因为 homesite 与 article_detail 整体页面样式,一样,只有内容部分不一样!!
继承,只传样式,没数据,怎么办? (include_tag)
知识点:
1.inclue 没有盒子得概念,某一块html直接拿来用!
{% include 'menu.html' %}
2.extends 可重写,可复用,有盒子得概念,整个页面继承.
{% extends 'base.html' %}
3.自定义标签
/blog/templatetags/my_tags.py
from django import template
register = template.Library()
@register.simple_tag
def mul(x,y):
return x*y
4.include_tag (自定义标签生成了html)
# 将 模板与数据 结合起来 (如果写函数也可以传数据,但是将模板与数据分开了)
/templatetags/my_tags.py
{% load my_tags %}
{% get_menu username %}
@register.inclusion_tag('menu.html')
def get_menu(username):
...
return {} 返回字典 去渲染 menu.html
作用:
include_tag 能解决复用问题,数据重复问题; 既有数据处理,又有模板渲染!
![]()
# -*- coding:utf-8 -*-
from django import template
register = template.Library()
@register.simple_tag
def mul(x,y):
return x*y
from blog.models import *
@register.inclusion_tag('menu.html')
def get_menu(username):
# 当前站点得用户对象
user = UserInfo.objects.filter(username=username).first()
blog = user.blog
# 查询站点所有每一个分类 以及 对应得文章数 分组!!
from django.db.models import Count
# 查询站点所有每一个分类 以及 对应得文章数 分组!!
cate_list = Category.objects.filter(blog=blog).annotate(count = Count('article')).values('title','count')
# 每一个标签以及对应得文章数
tag_list = Tag.objects.filter(blog=blog).annotate(count = Count('article')).values_list('title','count')
# 查询每一个年月 日期 查询 统计
date_list = Article.objects.filter(user=user).extra(select={"create_ym":"DATE_FORMAT(create_time,'%%Y-%%m')"}).values('create_ym').annotate(c = Count('nid')).values_list('create_ym','c')
return {'username':username,'cate_list':cate_list,'tag_list':tag_list,'date_list':date_list}
my_tags.py