【django】搭建博客教程(2)——Template的使用
来源:互联网 发布:淘宝拍摄布光 编辑:程序博客网 时间:2024/04/29 18:51
测试Template
前面我们只是将后端的数据显示到页面上而已,这并不能满足我们的需求,实际上,我们需要用到html,css,js,jquery等等来构建我们的博客。在界面设计方面,我们使用Bootstrap来作为前端的工具。对于前端部分,在教程中我就不多说了~因为东西太多了,大家有兴趣的可以自己学习~(由于我对前端其实不怎么感冒,所以也只是略懂一二,大多数时候是模仿着来做的!)
首先在/jiange_blog/blog/下创建templates文件夹;
接下来,在在jiange_blog/jiange_blog/setting.py下设置templates的位置
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', ], }, },]
添加template:
<!--在文件夹下添加test.html--><!DOCTYPE html><html> <head> <title>Test template</title> <style> body { background-color: blue; } em { color: LightSeaGreen; } </style> </head> <body> <h1>Hello World!</h1> <strong>{{ current_time }}</strong> </body></html>
修改views.py,此处我们使用通用视图:
from django.shortcuts import renderfrom django.http import HttpResponsefrom django.views.generic.base import TemplateViewfrom datetime import datetime# Create your views here.class TestView(TemplateView): template_name = "test.html" def get_context_data(self, **kwargs): context = super(TestView, self).get_context_data(**kwargs) context['current_time'] = datetime.now() return context
修改urls.py:
from django.conf.urls import urlfrom blog.views import TestViewurlpatterns = [ url(r'^$', TestView.as_view(), name='test'),]
运行之后,就可以看到渲染好的页面啦~
关于Class-based views ,官方文档:
https://docs.djangoproject.com/en/dev/ref/class-based-views/#built-in-class-based-views-api
正式开始我们的博客搭建:
1.数据库设计:略
2.templates设计:
首先,我们用一个base.html来作为基础,将我们的博客页面分为3个部分:导航栏nav,主体部分main,页脚footer:
<!DOCTYPE html><html lang="zh-cn"><head> <meta charset="UTF-8"> <!--手机html --> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Jiange</title> <link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <link rel="stylesheet" href="/static/css/jiange.css"> <link rel="stylesheet" href="/static/css/jiange_comments.css"> <link rel="stylesheet" href="/static/css/jiange_auth.css"> <link rel="stylesheet" href="/static/jquery/jquery.Jcrop.min.css"> <script src="/static/jquery/jquery-2.1.3.min.js"></script> <script src="/static/jquery/jquery.cookie.js"></script> <script src="/static/jquery/jquery.form.js"></script> <script src="/static/jquery/jquery.Jcrop.min.js"></script> <script src="/static/bootstrap/js/bootstrap.min.js"></script> {% block css%} {% endblock%}</head><body id="jiange"> <!-- 导航栏 --> {% include "./include/nav.html"%} <!-- 文章列表 与 侧边 --> <div id="jiange-main"> <div id="jiange-content" class="container"> {%block main%} {% endblock %} </div> <footer> <div class="container"> <p class="text-center">Copyright © Jiange 2015</p> </div> </footer> </div></body><script type="text/javascript" src="/static/js/jiange.js"></script>{% block js%}{% endblock%}</html>
其中,nav从”./include/nav.html”中包含进来,于是,整体只有main部分是变化的,所以其他页面只需要继承我们的base.html,就有了nav和footer,只需要在main中填充想要的内容即可。
比如我们的index.html:
{% extends "./base.html" %}{%block main%}<div class="row"> <div id="jiange-content" class="col-md-8 col-lg-9"> <!-- 警告框 --> <div class="well alert hidden-xs fade in"> <button class="close" data-dismiss="alert" type="button">×</button> 欢迎来到 <a href="" target="_blank">Jiange的个人博客</a> ,欢迎联系我:759878652@qq.com </div> <div class="visible-xs"> <div class="search"> <form class="form-inline clearfix" role="form" method="get" action="/search/"> <input type="text" class="form-control" id="top-s" name="s"> <button class="btn btn-jiange"> <span class="glyphicon glyphicon-search"></span> </button> </form> </div> </div> <!-- 首页文章列表 --> <div id="home-post-list"> <!--首页文章列表 --> {% if article_list %} {% with post_list=article_list %} {% for post in post_list %} {% include "./include/home_post.html" %} {% endfor %} {% endwith %} {% endif %} <!--分页 --> {% if page_obj%} {% include "./include/pagination.html"%} {% endif %} </div> </div> <!-- 右边的widgets --> <div id="jiange-side" class="col-md-4 col-lg-3 hidden-xs"> {% include "./widgets/tags_cloud.html"%} {% include "./widgets/search.html"%} {% include "./widgets/hotest_posts.html"%} {% include "./jiange_comments/latest_comments.html"%} {% include "./widgets/links.html"%} </div></div>{% endblock %}
对于view.py部分,由于我们的页面中间部分分为主体+侧边栏,而侧边栏是不变的,所以可以写一个class BaseMixin(object) 来对侧边栏的热门评论,最新文章进行渲染。然后用class IndexView(BaseMixin,ListView) 来对index.html进行渲染,返回侧边栏的信息以及文章信息。
class BaseMixin(object): def get_context_data(self,*args,**kwargs): context = super(BaseMixin,self).get_context_data(**kwargs) try: #热门文章 context['hot_article_list'] = Article.objects.order_by("-view_times")[0:10] #导航条 context['nav_list'] = Nav.objects.filter(status=0) #最新评论 context['latest_comment_list'] = Comment.objects.order_by("-create_time")[0:10] #友情链接 context['link_list'] = Link.objects.all() except Exception as e: logger.error(u'[BaseMixin]加载基本信息出错') return contextclass IndexView(BaseMixin,ListView): template_name = 'index.html' context_object_name = 'article_list' paginate_by = PAGE_NUM #分页--每页的数目 def get_context_data(self,**kwargs): return super(IndexView,self).get_context_data(**kwargs) def get_queryset(self): article_list = Article.objects.filter(status=0).exclude(en_title = 'aboutme') return article_list
- 【django】搭建博客教程(2)——Template的使用
- 【django】搭建博客教程(3)——markdown以及highlight
- Django搭建简易博客教程
- 基于Django开发的SkyNet博客二——base Template
- 【django】搭建博客教程(1)——环境搭建,项目创建及初步测试
- Django使用-Django搭建简单博客
- 【django】搭建博客教程(4)——超级简单实现滚动回到页面顶端按钮
- Django搭建简易博客教程(一)
- Django搭建简易博客教程(二)
- 关于使用Django和python搭建自己的博客
- Django 搭建简易博客(2)
- django template 自定义filter的使用
- Django中template 使用
- Django开发博客-(2)模板的使用
- 使用 django-blog-zinnia 搭建个人博客
- 四.Django的template
- 技术笔记——Django+Nginx+uwsgi搭建自己的博客(一)
- 技术笔记——Django+Nginx+uwsgi搭建自己的博客(二)
- [IOS 开发] 关于ios打印(AirPrint)
- iPad开发之Popover
- 【Unity开发】Unity5.x版本的AssetBundle打包
- gearmand分布
- 写在前面
- 【django】搭建博客教程(2)——Template的使用
- 【JavaEE】SSH+Spring Security基础上配置AOP+log4j
- centos6.4修改mysql默认密码方式
- Java集合---ArrayList的实现原理
- Scala文件I/O
- 开发者注意,圣诞节假期(12.22-12.29)不能提交或者更新app
- jQuery :技术解密(一)
- 学习struts2 (1)
- dedecms常用小技巧