一 目标
为文章标题列表添加作者的相关信息。
二 编写视图函数mysite/article/list_views.py
from django.shortcuts import render, get_object_or_404
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.contrib.auth.models import User
from .models import ArticlePost
# 这种方式兼顾两种可能,一种的直接请求所有文章标题,另外一个是请求某个用户的文章标题
def article_titles(request, username=None):
# 查看某一个作者的文章进次分支
if username:
user = User.objects.get(username=username)
articles_title = ArticlePost.objects.filter(author=user)
try:
userinfo = user.userinfo
except:
userinfo = None
else:
articles_title = ArticlePost.objects.all()
# 每页展示4篇文章
paginator = Paginator(articles_title, 4)
# 获得要展示的页面
page = request.GET.get('page')
try:
# 获取当前页
current_page = paginator.page(page)
# 获得当前页的文章对象
articles = current_page.object_list
except PageNotAnInteger:
current_page = paginator.page(1)
articles = current_page.object_list
except EmptyPage:
current_page = paginator.page(paginator.num_pages)
articles = current_page.object_list
if username:
# 传递用户相关信息给前端
return render(request, "article/list/author_articles.html", {"articles":articles, "page":current_page, "userinfo":userinfo, "user":user})
return render(request, "article/list/article_titles.html", {"articles":articles, "page": current_page})
# 没有登录的用户也可以访问这个函数
def article_detail(request, id, slug):
article = get_object_or_404(ArticlePost, id=id, slug=slug)
return render(request, "article/list/article_detail.html", {"article":article, })
三 新增模板mysite/templates/article/list/author_articles.html
{% extends "base.html" %}
{% load staticfiles %}
{% block title %}文章{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
<h1>阅读,丰富头脑,善化行为</h1>
</div>
<div class="container">
<div class="col-md-8">
{% for article in articles %}
<div class="list-group">
<a href="{{article.get_url_path}}" class="list-group-item active"><h4 class="list-group-item-heading">{{article.title}}</h4></a>
<p class="list-group-item-text">作者:<a href="{% url 'article:author_articles' article.author.username %}">{{article.author.username}}</a></p>
<p class="list-group-item-text">概要:{{article.body|slice:'70'|linebreaks}}</p>
</div>
{% endfor %}
{% include "paginator.html" %}
</div>
<div class="col-md-4">
<div>
<!--显示作者的图片-->
{% if userinfo.photo %}
<img src="{{ userinfo.photo | striptags }}" class="img-circle" id="my_photo" name="user_face">
{% else %}
<img name="user_face" src="{% static 'images/newton.jpg' %}" class="img-circle" id="my_photo">
{% endif %}
</div>
<div>
<!--显示用户相关信息-->
<p>{{ user.username }}</p>
{% if userinfo %}
<p>{{ userinfo.company }}
<p>{{ userinfo.aboutme }}</p>
{% else %}
<p>这个作者太懒了,什么也没有留下。</p>
{% endif %}
</div>
</div>
</div>
{% endblock %}
四 测试结果