文档章节

轻量级Django学习(3)——静态站点生成器(一)

Asian_Road
 Asian_Road
发布于 2017/02/12 11:41
字数 1415
阅读 40
收藏 1
点赞 1
评论 0

##创建基础模板

  • 静态站点

    通常包含一系列简易的基础模板,URL模式和用于每个静态页面的文件结构

  • 快速原型

    观察与分析开发(最小可行产品MVP)、部署采纳和培训迭代和维护

  • 最初项目结构

    文件(目录)架构 prototypes.py sitebuilder init.py static/ js/ css/ templates/ urls.py views.py

##基本设置

  • 在_prototypes.py_文件中加入下面的基本设置,同时把_sitebuilder_应用添加到**INSTALLED_APPS **设置中:
```

import sys from django.conf import settings settings.configure( DEBUG = True, SECRET_KEY = 'o5#@@7pyg#2absxle&_3j5dfkcfusozlr4$t2d^psgffu@7a4$', ROOT_URLCONF = 'sitebuilder.urls', MIDDLEWARE_CLASSES = (), INSTALLED_APPS =( 'django.contrib.staticfiles', 'sitebuilder', ), TEMPLATES =( { 'BACKEND':'django.template.backends.django.DjangoTemplates', 'DIRS':[], 'APP_DIRS':True, }, ), STATIC_URL = '/static/', ) if name == 'main': from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) ```

  • 还要在_urls.py_中加入URL设置,就是下一行代码:

      urlspatterns   = ()
    
  • 现在我们尝试启动项目来进行一次快速的完整性检查:

    python prototype.py runserver
    

修饰页面

  • 在_templates_文件夹下创建两个基础模板:base.html_和_page.html,同时建立pages文件夹存放所有的原型页面

  • 为了使静态站点生成器方便快捷地创建新页面,需要添加引用文件路径所需的设置变量、修饰页面所需的视图,以及指向动态页面所需的轻量级URL结构

    首先在_prototypes.py_文件中设置变量来添加引用文件夹的方式

import os import sys from django.conf import settings BASE_DIR = os.path.dirname(file) ... STATIC_URL = '/static/', SITE_PAGES_DIRECTORY = os.path.join(BASE_DIR,'pages'), ... ``` 现在我们可以方便地访问存放原型文件的_pages_文件夹,我们最终想要的搭建的效果是创建一个具有URL结构的站点,并通过每个页面的内容来匹配_pages_文件夹下的文件。页面的布局将由定义在templates文件夹中的模板确定。从而帮助我们从页面布局中分离页面内容

  • 创建_views.py_文件来动态修饰页面以供我们在本地使用。先添加一个视图修饰pages文件夹下的每个模板。

import os from django.conf import settings from django.http import Http404 from django.shortcuts import render from django.template import Template from django.utils._os import safe_join def get_page_or_404(name): # "返回Django模板内容或404" try: # 使用safe_join来将页面文件路径和模板文件名连接起来,并返回规范化的最终的决定路径 file_path = safe_join(settings.SITE_PAGES_DIRECTORY,name) except ValueError: raise Http404('Page Not Found') else: if not os.path.exists(file_path): raise Http404('Page Not Found') # 打开每个文件并使用文件内容创建新的Django模板 with open(file_path,'r') as f: page = Template(f.read()) return page def page(request,slug='index'): # "Render the requested page if found." file_name = '{}.html'.format(slug) page = get_page_or_404(file_name) context = { 'slug':slug, 'page':page, } #将要修饰的page和slug上下文传递给page.html布局模板 return render(request,'page.html',context) ```

> 要完成视图,需要_templates_文件夹下的_pages.html_模板对原型页面修饰,记住修饰所包含的环境是通过一个名为_page_的上下文变量传递的。

```html

{% extends "base.html" %} {% block title %}{{ block.super}} - {{ slug|capfirst }}{% endblock %} {% block content %} {% include page %} {% endblock %} ```

  • 视图环境配置之后,创建_urls.py_文件,包含发送对列表和详细页面请求的地点

from django.conf.urls import url from .views import page urlpatterns = ( url(r'^(?P<slug>[\w./-]+)/$',page,name='page'), url(r'^$',page,name='homepage'), ) ```

> 完成基本模板之后,就可以添加创建静态站点所需的任意内容。服务器根目录 / 将在不传递**slug**参数的形式下调用**pages**视图,这意味着它会使用默认的**index**作为**slug**值。为了修饰主页面,可以在pages文件夹下添加一个基础的_index.html_模板测试应用运行情况。

原型布局和导航

  • 我们采用Bootstrap中基于列的布局样式,创建一个简单的首页布局,接着使用一个简单的导航来制作其他页面。

  • 改进的_index.html_模板(位于pages文件夹下),我们使用了page的URL来创建到其他原型页面的URL。同时注意到,这里正在使用Django的{% lorem %}标签来生成主页的占位文字,这些标签帮助我们更快地创建页面。

<div class="jumbotron"> <div class="container"> <h1>Welcome To the Site</h1> <p>Insert marketing copy here.</p> </div> </div> <div class="container"> <div class="row"> <div class="col-md-6"> <h2>About</h2> <p>{% lorem %}</p> </div> <div class="col-md-6"> <h2>Content</h2> <p>{% lorem %}</p> <p> <a class="btn btn-default" href="{% url 'page' 'contact' %}" role="button"> Contact us >> </a> </p> </div> </div> </div> <hr> <footer> <div class="container"> <p>&copy; Your Company {% now 'Y' %}</p> </div> </footer> ``` - 在_base.html_模板(_templates_下)中添加一些基础的导航来作为站点级别的导航。在body标签内已经添加了{% block body-id %}模板标签,可以帮助我们为页面的每个部分指定CSS样式。

```html

...

<body id="{% block body-id %}body{% endblock %}"> {% block top-nav-wrapper %} <div class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/">Rapid Prototypes</a> </div> <div class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li {% if slug == 'index' %} class="active" {% endif %}> <a href="/">Home</a> </li> <li {% if slug == 'contact' %} class="active"{% endif %}> <a href="{% url 'page' 'contact' %}">Contact</a> </li> </ul> <ul class="nav navbar-nav navbar-right"> <li {% if slug == 'login' %} class="active"{% endif %}> <a href="{% url 'page' 'login' %}">Login</a> </li> </ul> </div> </div> </div> {% endblock %} {% block content %}{% endblock %} ... ``` - 我们还要需把上面的内容加到_page.html_布局中(_templates_文件夹下),我们使用页面的{{ slug }}值来为每个页面创建动态的ID值。

```html

{% extends "base.html" %} {% block title %}{{ block.super}} - {{ slug|capfirst }}{% endblock %} {% block body-id %}{{ slug|slugify }}{% endblock %} {% block content %} {% include page %} {% endblock %} ``` >这里添加了一个slugify筛选器来将页面生成的片段转换为小写值,并生成为一致的ID值。

  • 再次运行python prototype.py runserver,可以得到下面所示的界面。

    输入图片说明

  • 最后完成基础结构的创建后,可以继续添加登录模板。

© 著作权归作者所有

共有 人打赏支持
Asian_Road
粉丝 7
博文 5
码字总数 5109
作品 0
苏州
程序员
python资料全集

python: 微信公众号开发小记——2.80端口上的服务 python: 微信公众号开发小记——3.接入三方登录 使用python编写一个壁纸网站的简单爬虫 python: python List 用法 Python 中各个时间复杂度...

d_watson ⋅ 2016/04/15 ⋅ 0

Jekyll v3.8.3 发布,简单易用的静态站点生成器

Jekyll 是一个简单的博客形态的静态站点生成器,适用于个人、项目或组织站点。可以想像它是一个基于文件的 CMS ,没有任何复杂性。 Jekyll 收集你的内容,呈现 Markdown 和 Liquid 模板,并生...

局长 ⋅ 06/06 ⋅ 0

【译】用Go实现一个静态博客生成器

【译】用Go实现一个静态博客生成器 Go语言学习园地博客2017-06-2028 阅读 go生成器 静态站点生成器是一种工具,给一些输入(例如,markdown),使用HTML,CSS和JavaScript生成完全静态的网站...

Go语言学习园地博客 ⋅ 2017/06/20 ⋅ 0

Github上的PHP资源汇总

依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers: 一个多框架Composer库安装器 Pickle: 可以在任意平台上安装PHP扩展包 依赖管理的附加部...

zhangsirsdo ⋅ 2015/01/07 ⋅ 2

Github上PHP资源汇总大全

依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers: 一个多框架Composer库安装器 Pickle: 可以在任意平台上安装PHP扩展包 静态站点生成器 ...

zhiqiangw ⋅ 2016/12/18 ⋅ 0

python常用模块库清单

文本时间处理】 Chardet,字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama,主要用来给文本添加各种颜色,并且非常简单易用。 Prettytable,主要用于在终端或浏览器端构建格式...

好铁 ⋅ 2016/12/08 ⋅ 0

Python支持库大全

Awesome Python A curated list of awesome Python frameworks, libraries and software. Inspired by awesome-php. Awesome Python Environment Management    环境管理 Package Manageme......

openthings ⋅ 2016/03/17 ⋅ 1

【译】自己动手写Django app,第二部分【完】

原文地址:https://docs.djangoproject.com/en/1.4/intro/tutorial02/ 这个教程从教程一留下的东西开始的。我们继续网络调查应用程序同时我们将会关注Django的自动生成的管理站点。 (哲学:...

davidxp ⋅ 2013/02/22 ⋅ 13

生成对抗网络(GAN)的理论与应用完整入门介绍

文章来源:https://blog.csdn.net/blood0604/article/details/73635586?locationNum=1&fps=1 本文包含以下内容: 1.为什么生成模型值得研究 2.生成模型的分类 3.GAN相对于其他生成模型相比有...

yangdelong ⋅ 05/28 ⋅ 0

《Python高效开发实战》实战演练——开发Django站点1

6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程。本节通过建立一个消息录入页面演示Django的开发流程及相关技术。 6.12.1 建立项目 在进行Django开发之前需要先...

woIwoI ⋅ 2016/11/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 今天 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部