【小白实战】利用django2.0,搭建属于自己的博客(9)


发布时间:2019-02-15 13:08    作者: Uncle Hui   已过去:1 年,1 月   阅读总量:452 已被赞:0


今天我们来实现文章按年月自动分类的功能!和全局变量的设置总体效果如图:

【全局变量的设置】:全局变量可以让每个页面都需要的内容,一次性都设置好,不需要重复传递。如导航栏等

原理及详细过程请参看我的这篇:全局变量的设置  http://www.hui2017.top/p/104

【blog/ 新建quanjubianliang.py】

在里面定义两个变量:

from blog.models import Tag,Post

#定义一个导航栏,让每个页面都可以使用
def dhl(request):
    tags = Tag.objects.all()
    return {'tags_quanjubianliang':tags}

#定义时间归档
def date_times(request):
    date_post = Post.objects.dates('put_in_time','month',order='DESC')
    return {'date_post': date_post}

【在settings.py里将变量注册进去】

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'blog.quanjubianliang.dhl',
                'blog.quanjubianliang.date_times',
            ],
        },
    },
]
USE_TZ = False

【在base.html模板里使用这些全局变量,其他页面就有了】

<ul class="nav navbar-nav">
    <li class="active"><a href="/">首页 <span class="sr-only">(current)</span></a></li>
    {% for tag in tags_quanjubianliang %}
        <li><a href="#">{{ tag.name }}</a></li>
    {% endfor %}
</ul>
 <div class="col-sm-3 col-sm-offset-1 blog-sidebar">
         {% block you1 %}
        {% endblock %}
        {% block you2 %}
        {% endblock %}
      <div class="sidebar-module">
    <h4>日期归档</h4>
    <ol class="list-unstyled">
       {% for i in date_post %}
        <li><a href="{% url 'date_time' i.year i.month %}">{{ i|date:'Y年m月' }}</a></li>
       {% endfor %}

    </ol>
</div>
        {% block you3 %}
        {% endblock %}

【views.py里设置处理每月日期下的文章列表的视图函数】

# #时间归档生成指定的列表页面
def date_time(request,year,month):
    post_list = Post.objects.filter(put_in_time__year=year,put_in_time__month=month)
    print(post_list)
    content = {
          "post_list":post_list
     }
    return render(request,'blog/date_time.html',content)

 

【blog/urls.py 为日期归档展示页面设置路由】

from .views import index,post_read,date_time
urlpatterns = [
    path('<int:year>/<int:month>',date_time,name='date_time') #文章时间归档显示页面路由
]

【在base.html 里把每个日期要跳转的路由要改一下】

<h4>日期归档</h4> <ol class="list-unstyled"> {% for i in date_post %} <li><a href="{% url 'date_time' i.year i.month %}">{{ i|date:'Y年m月' }}</a></li> {% endfor %}

启动,查看效果,在后台手动去添加一些日期的文章,可以看到每个页面都有了日期归档和导航栏!

点赞

0




登陆后方可评论