美文网首页
12 Boostrap响应式布局

12 Boostrap响应式布局

作者: CurryCoder | 来源:发表于2020-05-12 16:59 被阅读0次

    技术交流QQ群:1027579432,欢迎你的加入!

    本教程来源于B站杨仕航Django2.0开发视频教程,如需转载,必须注明来源!

    1.Bootstra的响应式设计

    栅格参数.png
    • Bootstrap需要为页面内容和栅格系统包裹一个.container容器,栅格系统中的所有列(column)必须放在.row内。

    2.栅格系统代码基本结构

    <div class="container">
        <div class="row">
            <div class="col-xx-*"></div>
            <div class="col-xx-*"></div>
        </div>
    </div>
    
    • 因为博客分类的页面与blog这个Django应用联系更紧密,因此将mysite根目录下的templates文件夹下的blog文件夹剪切至blog文件目录下的templates文件夹中。这样,既方便整个项目的迁移,又不用去修改views.py文件中的路径。
    • 修改blog文件夹下的views.py文件,在blog_list()函数中返回博客分类字段。如下所示:
      context['blog_types'] = BlogType.objects.all()
      
    • 打开博客列表前端页面对应的blog_list.html文件,添加Bootstrap中的栅格系统后的文件内容如下所示:
      {% extends 'base.html' %}
      {# blog_list.html文件内容 #}
      {# 页面标题 #}
      {% block title %}我的网站{% endblock %}
      {% block nav_blog_active %}active{% endblock %}
      
      
      
      {# 页面内容 #}
      {% block content %}
          <div class="container">
              <div class="row">
                  <div class="col-xs-12 col-sm-8 col-md-9 col-lg-10">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              博客列表(一共有{{ blogs|length }}篇博客)
                          </div>
                          <div class="panel-body">
                              <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->
                              {% for blog in blogs %}
                              <!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) -->
                                  <a href="{% url 'blog_detail' blog.pk %}"><h3>{{ blog.title }}</h3></a>
                                  <p>{{ blog.content|truncatechars:30 }}</p>
                              {% empty %}
                                  <p>--暂无博客,敬请期待--</p>
                              {% endfor %}
      
                          </div>
                      </div>
      
                  </div>
      
                  <div class="hidden-xs col-sm-4 col-md-3 col-lg-2">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              博客分类
                          </div>
                          <div class="panel-body">
                              <ul style="list-style: none;">
                                  {% for blog_type in blog_types %}
                                      <li><a href="{% url 'blogs_with_type' blog_type.pk %}">{{ blog_type.type_name }}</a></li>
                                  {% empty %}
                                      <li>暂无分类</li>
                                  {% endfor %}
                              </ul>
                          </div>
                      </div>
                  </div>
              </div>
          </div>
      
      {% endblock %}
      
    • 对上述blog_list.html文件进行修改,主要修改ul style="list-style: none;"></ul>。在static目录下创建blog.css文件,将样式写在该文件下,如下所示:
      ul.blog-types {
          list-style: none;
      }
      
    • 然后在blog_list.html文件中引入blog.css文件,即添加内容后的blog_list.html如下所示:
      {% extends 'base.html' %}
      {# blog_list.html文件内容 #}
      {# 页面标题 #}
      {% block title %}我的网站{% endblock %}
      {% block nav_blog_active %}active{% endblock %}
      
      {% load staticfiles %}
      {% block header_extends %}
          <link rel="stylesheet" href="{% static 'blog.css' %}">
      {% endblock %}
      
      {# 页面内容 #}
      {% block content %}
          <div class="container">
              <div class="row">
                  <div class="col-xs-12 col-sm-8 col-md-9 col-lg-10">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              博客列表(一共有{{ blogs|length }}篇博客)
                          </div>
                          <div class="panel-body">
                              <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->
                              {% for blog in blogs %}
                              <!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) -->
                                  <a href="{% url 'blog_detail' blog.pk %}"><h3>{{ blog.title }}</h3></a>
                                  <p>{{ blog.content|truncatechars:30 }}</p>
                              {% empty %}
                                  <p>--暂无博客,敬请期待--</p>
                              {% endfor %}
      
                          </div>
                      </div>
      
                  </div>
      
                  <div class="hidden-xs col-sm-4 col-md-3 col-lg-2">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              博客分类
                          </div>
                          <div class="panel-body">
                              <ul class="blog-types">
                                  {% for blog_type in blog_types %}
                                      <li><a href="{% url 'blogs_with_type' blog_type.pk %}">{{ blog_type.type_name }}</a></li>
                                  {% empty %}
                                      <li>暂无分类</li>
                                  {% endfor %}
                              </ul>
                          </div>
                      </div>
                  </div>
              </div>
          </div>
      
      {% endblock %}
      
    • 因为blog.css与具体的Django应用blog相关,所以需要在Django应用blog文件夹下创建static文件夹,然后在该文件夹下创建blog文件夹。最后,将blog.css文件粘贴到blog文件夹中即可。注意:修改blog_list.html文件中加载blog.css文件的路径为:<link rel="stylesheet" href="{% static 'blog/blog.css' %}">,再重启本地服务。
    • 因为博客首页预览显示的文字只有30,所以修改blog_list.html文件中的<p>{{ blog.content|truncatechars:30 }}</p>为** <p>{{ blog.content|truncatechars:120 }}</p>**,具体效果如下所示:
      博客首页预览显示的文字个数.png
    • 如上图所示,每篇博客的标题与博客列表(一共有3篇博客)之间的间距太大,因此修改blog_list.html,增加一个class名为blog的div盒子。如下所示:
      {% extends 'base.html' %}
      {# blog_list.html文件内容 #}
      {# 页面标题 #}
      {% block title %}我的网站{% endblock %}
      {% block nav_blog_active %}active{% endblock %}
      
      {% load staticfiles %}
      {% block header_extends %}
          <link rel="stylesheet" href="{% static 'blog/blog.css' %}">
      {% endblock %}
      
      {# 页面内容 #}
      {% block content %}
          <div class="container">
              <div class="row">
                  <div class="col-xs-12 col-sm-8 col-md-9 col-lg-10">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              博客列表(一共有{{ blogs|length }}篇博客)
                          </div>
                          <div class="panel-body">
                              <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->
                              {% for blog in blogs %}
                                  <div class="blog">
                                      <!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) -->
                                      <h3><a href="{% url 'blog_detail' blog.pk %}">{{ blog.title }}</a></h3>
                                      <p>{{ blog.content|truncatechars:120 }}</p>
                                  </div>
                              {% empty %}
                                 <div class="bog">
                                      <h3>暂无博客,敬请期待</h3>
                                 </div>
                              {% endfor %}
                          </div>
                      </div>
      
                  </div>
      
                  <div class="hidden-xs col-sm-4 col-md-3 col-lg-2">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              博客分类
                          </div>
                          <div class="panel-body">
                              <ul class="blog-types">
                                  {% for blog_type in blog_types %}
                                      <li><a href="{% url 'blogs_with_type' blog_type.pk %}">{{ blog_type.type_name }}</a></li>
                                  {% empty %}
                                      <li>暂无分类</li>
                                  {% endfor %}
                              </ul>
                          </div>
                      </div>
                  </div>
              </div>
          </div>
      
      {% endblock %}
      
    • 给blog_list.html文件中的h3和class=blog的div标签增加css样式进行修饰,打开blog.css文件,增加如下内容:
      div.blog:not(:last-child) {
          margin-bottom: 2em;
          padding-bottom: 1em;
          border: 1px solid #eee;
      }
      
      div.blog h3 {
          margin-top: 0.5em;
      }
      
    • 在blog_list.html文件中增加博客的分类与发表时间,修改后的blog_list.html如下所示:
      {% extends 'base.html' %}
      {# blog_list.html文件内容 #}
      {# 页面标题 #}
      {% block title %}我的网站{% endblock %}
      {% block nav_blog_active %}active{% endblock %}
      
      {% load staticfiles %}
      {% block header_extends %}
          <link rel="stylesheet" href="{% static 'blog/blog.css' %}">
      {% endblock %}
      
      {# 页面内容 #}
      {% block content %}
          <div class="container">
              <div class="row">
                  <div class="col-xs-12 col-sm-8 col-md-9 col-lg-10">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              博客列表(一共有{{ blogs|length }}篇博客)
                          </div>
                          <div class="panel-body">
                              <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->
                              {% for blog in blogs %}
                                  <div class="blog">
                                      <!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) -->
                                      <h3><a href="{% url 'blog_detail' blog.pk %}">{{ blog.title }}</a></h3>
                                      <p class="blog-info">
                                          分类:<a href="{% url 'blogs_with_type' blog.blog_type.pk %}">{{ blog.blog_type }}</a> &nbsp&nbsp&nbsp
                                          发表日期:{{ blog.created_time|date:"Y-m-d" }}
                                      </p>
                                      <p>{{ blog.content|truncatechars:120 }}</p>
                                  </div>
                              {% empty %}
                                 <div class="bog">
                                      <h3>暂无博客,敬请期待</h3>
                                 </div>
                              {% endfor %}
                          </div>
                      </div>
      
                  </div>
      
                  <div class="hidden-xs col-sm-4 col-md-3 col-lg-2">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              博客分类
                          </div>
                          <div class="panel-body">
                              <ul class="blog-types">
                                  {% for blog_type in blog_types %}
                                      <li><a href="{% url 'blogs_with_type' blog_type.pk %}">{{ blog_type.type_name }}</a></li>
                                  {% empty %}
                                      <li>暂无分类</li>
                                  {% endfor %}
                              </ul>
                          </div>
                      </div>
                  </div>
              </div>
          </div>
      
      {% endblock %}
      
    • 修改博客正文内容与博客分类与发表日期之间的间距,在blog.css中增加如下代码:
      div.blog p.blog-info {
          margin-bottom: 0;
      }
      
    • 接着将分类与发表日期修改为图标表示,在blog_list.html中增加如下代码:
      <span class="glyphicon glyphicon-tag"></span>
      <span class="glyphicon glyphicon-time"></span>
      
    • 点击首页中的博客,可以显示全部的博客。点击页面中的随笔,可以进入所有都是随笔类型博客。这个前端页面与主页中显示的全部博客页面类型。blog_list.html模板文件和blogs_with_type.html模板文件的不同是一个是统计总的博客数量,一个是按博客类型统计数量。因此,可以对blog_list.html模板文件进行修改。首先在blog_list.html文件中,增加模板标签{% block blog_list_title %}博客列表(一共有{{ blogs|length }}篇博客){% endblock %},这样可以根据blogs_with_type.html中与blog_list.html不同部分的内容对模板标签进行替换,增加后的blog_list.html文件如下所示:
      {% extends 'base.html' %}
      {# blog_list.html文件内容 #}
      {# 页面标题 #}
      {% block title %}我的网站{% endblock %}
      {% block nav_blog_active %}active{% endblock %}
      
      {% load staticfiles %}
      {% block header_extends %}
          <link rel="stylesheet" href="{% static 'blog/blog.css' %}">
      {% endblock %}
      
      {# 页面内容 #}
      {% block content %}
          <div class="container">
              <div class="row">
                  <div class="col-xs-12 col-sm-8 col-md-9 col-lg-10">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              {% block blog_list_title %}博客列表(一共有{{ blogs|length }}篇博客){% endblock %}
                          </div>
                          <div class="panel-body">
                              <!-- 下一行中的blogs来自于views.py中的context['blogs'] = Blog.objects.all() -->
                              {% for blog in blogs %}
                                  <div class="blog">
                                      <!-- 下一行中的blog.title来自于models.py中的title = models.CharField(max_length=50) -->
                                      <h3><a href="{% url 'blog_detail' blog.pk %}">{{ blog.title }}</a></h3>
                                      <p class="blog-info">
                                          <span class="glyphicon glyphicon-tag"></span><a href="{% url 'blogs_with_type' blog.blog_type.pk %}">{{ blog.blog_type }}</a> &nbsp&nbsp&nbsp
                                          <span class="glyphicon glyphicon-time"></span>{{ blog.created_time|date:"Y-m-d" }}
                                      </p>
                                      <p>{{ blog.content|truncatechars:120 }}</p>
                                  </div>
                              {% empty %}
                                 <div class="bog">
                                      <h3>暂无博客,敬请期待</h3>
                                 </div>
                              {% endfor %}
                          </div>
                      </div>
      
                  </div>
      
                  <div class="hidden-xs col-sm-4 col-md-3 col-lg-2">
                      <div class="panel panel-default">
                          <div class="panel-heading">
                              博客分类
                          </div>
                          <div class="panel-body">
                              <ul class="blog-types">
                                  {% for blog_type in blog_types %}
                                      <li><a href="{% url 'blogs_with_type' blog_type.pk %}">{{ blog_type.type_name }}</a></li>
                                  {% empty %}
                                      <li>暂无分类</li>
                                  {% endfor %}
                              </ul>
                          </div>
                      </div>
                  </div>
              </div>
          </div>
      
      {% endblock %}
      
    • 接着对blogs_with_type.html文件进行修改,引用blog_list.html文件中已经写好的部分内容。修改后的内容如下所示:
      {% extends 'blog/blog_list.html' %}
      
      {# blogs_with_type.html文件内容 #}
      
      {# 页面标题 #}
      {% block title %}
          {{ blog_type.type_name }}
      {% endblock %}
      
      {% block blog_list_title %}
          分类:{{ blog_type.type_name }}(一共有{{ blogs|length }}篇博客)
      {% endblock %}
      
    • 因为blog文件目录下的views.py中缺少博客分类对应的处理方法,所以出现下面的画面:


      博客分类显示暂无分类.png
    • 打开blog文件目录下的views.py文件,对blogs_with_type()方法进行修改,修改后的views.py内容如下所示:
      from django.shortcuts import render_to_response, get_object_or_404
      from .models import Blog, BlogType
      # Create your views here.
      
      
      def blog_list(request):
          context = {}
          context['blogs'] = Blog.objects.all()
          context['blog_types'] = BlogType.objects.all()
          return render_to_response('blog/blog_list.html', context)
      
      
      def blog_detail(request, blog_pk):
          context = {}
          context['blog'] = get_object_or_404(Blog, pk=blog_pk)
          return render_to_response('blog/blog_detail.html', context)
      
      
      def blogs_with_type(request, blog_type_pk):
          context = {}
          blog_type = get_object_or_404(BlogType, pk=blog_type_pk)
          context['blog_type'] = blog_type
          context['blogs'] = Blog.objects.filter(blog_type=blog_type)
          context['blog_types'] = BlogType.objects.all()
          return render_to_response('blog/blogs_with_type.html', context)
      
    • 在blogs_with_type.html模板文件中增加查看全部博客,便于显示所有对应类别的博客。因此,对blogs_with_type.html文件进行修改,修改后的内容如下所示:
      {% extends 'blog/blog_list.html' %}
      
      {# blogs_with_type.html文件内容 #}
      
      {# 页面标题 #}
      {% block title %}
          {{ blog_type.type_name }}
      {% endblock %}
      
      {% block blog_list_title %}
          分类:{{ blog_type.type_name }}(一共有{{ blogs|length }}篇博客)
          <a href="{% url 'blogs_with_type' blog_type.pk %}">查看全部博客</a>
      {% endblock %}
      
    • 对具体某篇博客的模板文件blog_detail.html进行修改,修改后的内容如下所示:
      {% extends 'base.html' %}
      
      {# 页面标题 #}
      {% block title %}
          {{ blog.title }}
      {% endblock %}
      
      {% block nav_blog_active %}
          active
      {% endblock %}
      
      
      {% load staticfiles %}
      {% block header_extends %}
          <link rel="stylesheet" href="{% static 'blog/blog.css' %}">
      {% endblock %}
      
      
      {# 页面内容 #}
      {% block content %}
          <div class="contaiiner">
              <div class="row">
                  <div class="col-xs-10 col-xs-offset-1">
                      <h3>{{ blog.title }}</h3>
                      <ul class="blog-info-description">
                          <li>作者: {{ blog.author }}</li>
                          <li>分类:
                              <a href="{% url 'blogs_with_type' blog.blog_type.pk %} ">
                                  {{ blog.blog_type }}
                              </a>
                          </li>
                          <li>发表日期: {{ blog.created_time|date:"Y-m-d" }}</li>
                      </ul>
      
                      <div class="blog-content">{{ blog.content }}</div>
                  </div>
              </div>
          </div>
      
      {% endblock %}
      
    • 最后,对blog_detail.html进行css美化修饰。在blog.css中增加如下内容:
      ul.blog-info-description {
          list-style: none;
          margin-bottom: 1em;
      
      }
      
      ul.blog-info-description li {
          display: inline-block;
          margin-right: 2em;
      }
      
      div.blog-content {
          text-indent: 2em;
      }
      

    相关文章

      网友评论

          本文标题:12 Boostrap响应式布局

          本文链接:https://www.haomeiwen.com/subject/posbnhtx.html