博客-3-首页、个人博客详情页

母版

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ blog.title }}</title>
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="/static/fontawesome/css/font-awesome.min.css">
    <link rel="stylesheet" href="/static/mystyle.css">
    <link rel="stylesheet" href="/static/theme/{{ blog.theme }}">
    <script src="/static/jquery-3.3.1.js"></script>
    <script src="/static/bootstrap/js/bootstrap.min.js"></script>
</head>
<body>

<div class="header">
    <p>{{ blog.title }}</p>
</div>

<div class="container">
    <div class="col-md-3">
		//自定义simple_tag,传入参数,渲染left_menu.HTML文件,返回HTML文件
		{% load my_tags %}
		{% get_left_menu username %}
	</div>
	
<div class="col-md-8">
	//导入page-main块
	{% block page-main %}
	{% endblock %}
</div>
</div>

my_tags.py

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

register = template.Library()
@register.inclusion_tag("left_menu.html")
def get_left_menu(username):
	user = models.UserInfo.objects.filter(username=username).first()
	blog = user.blog
	# 查询文章分类及对应的文章数
	category_list = models.Category.objects.filter(blog=blog).annotate(c=Count("article")).values("title", "c")
	# 查文章标签及对应的文章数
	tag_list = models.Tag.objects.filter(blog=blog).annotate(c=Count("article")).values("title", "c")

	# 按日期归档
	archive_list = models.Article.objects.filter(user=user).extra(
		select={"archive_ym": "date_format(create_time,'%%Y-%%m')"}
	).values("archive_ym").annotate(c=Count("nid")).values("archive_ym", "c")

	return {
		"username": username,
		"category_list" :category_list,
		"tag_list": tag_list,
		"archive_list": archive_list
	}

simple_tag的HTML文件渲染左侧标签分类

<div class="panel panel-primary">
<div class="panel-heading">文章分类</div>
<div class="panel-body">
	{% for category in category_list %}
		<p><a href="/blog/{{ username }}/category/{{ category.title }}/">{{ category.title }}({{ category.c }})</a></p>
	{% endfor %}
</div>
</div>

<div class="panel panel-warning">
	<div class="panel-heading">文章标签</div>
	<div class="panel-body">
		{% for tag in tag_list %}
			<p><a href="/blog/{{ username }}/tag/{{ tag.title }}/">{{ tag.title }}({{ tag.c }})</a></p>
		{% endfor %}
	</div>
</div>

<div class="panel panel-info">
	<div class="panel-heading">日期归档</div>
	<div class="panel-body">
		{% for archive in archive_list %}
			<p><a href="/blog/{{ username }}/archive/{{ archive.archive_ym }}/">{{ archive.archive_ym }}({{ archive.c }})</a></p>
		{% endfor %}
	</div>
</div>

home.html

{% extends 'base.html' %}

{% block page-main %}
	<!-- 个人博客列表 开始-->
	<div class="article-list">
		{% for article in article_list %}
			<div class="article">
				//博客文章标题,链接指向详情页
				<p class="article-title"><a
						href="/blog/{{ article.user.username }}/article/{{ article.pk }}/">{{ article.title }}</a></p>
				<div class="media">
					//显示个人图像,链接指向个人博客主页
					<div class="media-left">						
						<a href="/blog/{{ article.user.username }}/">
							<img class="media-object author-img" src="/media/{{ article.user.avatar }}" alt="...">
						</a>
					</div>
					//文章描述
					<div class="media-body">
						<p>{{ article.desc }}</p>
					</div>
				</div>
				<div class="article-footer">
					<span><a href="/blog/{{ article.user.username }}/">{{ article.user.username }}</a></span>发布于
					<span>{{ article.create_time|date:'Y-m-d H:i:s' }}</span>                  
					<span><i class="fa fa-commenting-o fa-fw"
							 aria-hidden="true"></i>评论({{ article.comment_count }})</span>
					<span><i class="fa fa-thumbs-o-up fa-fw"
							 aria-hidden="true"></i>点赞({{ article.up_count }})</span>
				</div>
				<hr>
			</div>
		{% endfor %}

	</div>
	<!-- 个人博客列表 结束-->
{% endblock %}

博客详情页

{% extends 'base.html' %}

{% block page-main %}
    <div class="article-detail">
        <h1>{{ article.title }}</h1>
        <p>{{ article.articledetail.content|safe }}</p>
    </div>
{% endblock %}

路由

from django.conf.urls import url, include
from blog import urls as blog_urls
urlpatterns = [
	url(r'^blog/', include(blog_urls)),
]


from django.conf.urls import url
from blog import views
urlpatterns = [	
	url(r'(\w+)/(tag|category|archive)/(.+)/', views.home),  # 此分类博客文章
	url(r'(\w+)/article/(\d+)/$', views.article_detail),  # 文章详情
	url(r'(\w+)', views.home),  #个人主页
]

视图

# 个人博客主页
def home(request, username, *args):
    logger.debug("home视图获取到用户名:{}".format(username))
    # 去UserInfo表里把用户对象取出来
    user = models.UserInfo.objects.filter(username=username).first()
    if not user:
        logger.warning("又有人访问不存在页面了...")
        return HttpResponse("404")
    # 如果用户存在需要将TA写的所有文章找出来
    blog = user.blog
    if not args:
        logger.debug("args没有接收到参数,默认走的是用户的个人博客页面!")
        # 我的文章列表
        article_list = models.Article.objects.filter(user=user)
    
else:
	#按照文章分类选文章
    if args[0] == "category":
        article_list = models.Article.objects.filter(user=user).filter(category__title=args[1])
    #按照标签分类选择文章
	elif args[0] == "tag":
        article_list = models.Article.objects.filter(user=user).filter(tags__title=args[1])
    else:
        # 按照日期分类选择
        try:
            year, month = args[1].split("-")
            logger.debug("分割得到参数year:{}, month:{}".format(year, month))
            logger.debug("************************")
            article_list = models.Article.objects.filter(user=user).filter(
                create_time__year=year, create_time__month=month
            )
        except Exception as e:
            logger.warning("请求访问的日期归档格式不正确!!!")
            logger.warning((str(e)))
            return HttpResponse("404")
return render(request, "home.html", {
    "username": username,
    "blog": blog,
    "article_list": article_list,
})

def article_detail(request, username, pk):
    """
    :param username: 被访问的blog的用户名
    :param pk: 访问的文章的主键id值
    :return: 返回字符串替换HTML文件
    """
    user = models.UserInfo.objects.filter(username=username).first()
    if not user:
        return HttpResponse("404")
    blog = user.blog
    # 找到当前的文章
    article_obj = models.Article.objects.filter(pk=pk).first()
    # 所有评论列表
    comment_list=models.Comment.objects.filter(article_id=pk)

    return render(
        request,
        "article_detail.html",
        {
            "username": username,
            "article": article_obj,
            "blog": blog,
            "comment_list":comment_list
         })
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值