djngo快速实现--使用Bootstrap

继续django学习之旅,之前我们所做的Django练习前端都非常丑。这节我们使用Bootstrap,顿时使丑陋的页面变成白天鹅。

安装Bootstrap                                      

Bootstrap是什么?

Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。

django-bootstrap-toolkit

django-bootstrap-toolkit应用可以让Django非容易的集成Bootstrap。

安装django-bootstrap-toolkit

>pip install django-bootstrap-toolkit

运行bootstrap例子                                   

 

克隆django-bootstrap-toolkit 项目

https://github.com/dyve/django-bootstrap-toolkit

$ git clone git://github.com/dyve/django-bootstrap-toolkit.git

克隆下来的django-bootstrap-toolkit 项目自带demo_project,现在我们可以直接运行这个demo了。

进入demo_project 目录运行:

> python manage.py runserver

通过浏览器访问:http://127.0.0.1:8000/

wa o !! cool 比我们之前的djngo例子好看多了。

预览demo_project                                                                       

来看一下这个项目的结构吧!

通过前面多个django项目练习,我们已经对这个目录结构不陌生了。下面看看这个例子要特别注意的:

settings.py

……
INSTALLED_APPS = (
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.sites‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    # Uncomment the next line to enable the admin:
    # ‘django.contrib.admin‘,
    # Uncomment the next line to enable admin documentation:
    # ‘django.contrib.admindocs‘,
    ‘bootstrap_toolkit‘,
    ‘demo_app‘,
)
……

要想使用bootstrap,这里必须加载bootstrap_toolkit ,demo_app则是我们当前的项目。

urls.py

from django.conf.urls import patterns, url

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
from django.views.generic import TemplateView

urlpatterns = patterns(‘‘,
    # Examples:
    # url(r‘^$‘, ‘demo_project.views.home‘, name=‘home‘),
    # url(r‘^demo_project/‘, include(‘demo_project.foo.urls‘)),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r‘^admin/doc/‘, include(‘django.contrib.admindocs.urls‘)),

    # Uncomment the next line to enable the admin:
    # url(r‘^admin/‘, include(admin.site.urls)),

    url(r‘^$‘, TemplateView.as_view(template_name=‘index.html‘), name="home"),
    url(r‘^contact$‘, TemplateView.as_view(template_name=‘contact.html‘), name="contact"),
    url(r‘^form$‘, ‘demo_app.views.demo_form‘),
    url(r‘^form_template$‘, ‘demo_app.views.demo_form_with_template‘),
    url(r‘^form_inline$‘, ‘demo_app.views.demo_form_inline‘),
    url(r‘^formset$‘, ‘demo_app.views.demo_formset‘, {}, "formset"),
    url(r‘^tabs$‘, ‘demo_app.views.demo_tabs‘, {}, "tabs"),
    url(r‘^pagination$‘, ‘demo_app.views.demo_pagination‘, {}, "pagination"),
    url(r‘^widgets$‘, ‘demo_app.views.demo_widgets‘, {}, "widgets"),
    url(r‘^buttons$‘, TemplateView.as_view(template_name=‘buttons.html‘), name="buttons"),
)

下面再看看views.py写了哪些中间逻辑:

from django.contrib import messages
from django.forms.formsets import formset_factory
from django.shortcuts import render_to_response
from django.template.context import RequestContext
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage

from bootstrap_toolkit.widgets import BootstrapUneditableInput

from .forms import TestForm, TestModelForm, TestInlineForm, WidgetsForm, FormSetInlineForm

def demo_form_with_template(request):
    layout = request.GET.get(‘layout‘)
    if not layout:
        layout = ‘vertical‘
    if request.method == ‘POST‘:
        form = TestForm(request.POST)
        form.is_valid()
    else:
        form = TestForm()
    modelform = TestModelForm()
    return render_to_response(‘form_using_template.html‘, RequestContext(request, {
        ‘form‘: form,
        ‘layout‘: layout,
    }))

def demo_form(request):
    messages.success(request, ‘I am a success message.‘)
    layout = request.GET.get(‘layout‘)
    if not layout:
        layout = ‘vertical‘
    if request.method == ‘POST‘:
        form = TestForm(request.POST)
        form.is_valid()
    else:
        form = TestForm()
    form.fields[‘title‘].widget = BootstrapUneditableInput()
    return render_to_response(‘form.html‘, RequestContext(request, {
        ‘form‘: form,
        ‘layout‘: layout,
    }))

def demo_form_inline(request):
    layout = request.GET.get(‘layout‘, ‘‘)
    if layout != ‘search‘:
        layout = ‘inline‘
    form = TestInlineForm()
    return render_to_response(‘form_inline.html‘, RequestContext(request, {
        ‘form‘: form,
        ‘layout‘: layout,
    }))

def demo_formset(request):
    layout = request.GET.get(‘layout‘)
    if not layout:
        layout = ‘inline‘
    DemoFormSet = formset_factory(FormSetInlineForm)
    if request.method == ‘POST‘:
        formset = DemoFormSet(request.POST, request.FILES)
        formset.is_valid()
    else:
        formset = DemoFormSet()
    return render_to_response(‘formset.html‘, RequestContext(request, {
        ‘formset‘: formset,
        ‘layout‘: layout,
    }))

def demo_tabs(request):
    layout = request.GET.get(‘layout‘)
    if not layout:
        layout = ‘tabs‘
    tabs = [
        {
            ‘link‘: "#",
            ‘title‘: ‘Tab 1‘,
            },
        {
            ‘link‘: "#",
            ‘title‘: ‘Tab 2‘,
            }
    ]
    return render_to_response(‘tabs.html‘, RequestContext(request, {
        ‘tabs‘: tabs,
        ‘layout‘: layout,
    }))

def demo_pagination(request):
    lines = []
    for i in range(10000):
        lines.append(u‘Line %s‘ % (i + 1))
    paginator = Paginator(lines, 10)
    page = request.GET.get(‘page‘)
    try:
        show_lines = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        show_lines = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        show_lines = paginator.page(paginator.num_pages)
    return render_to_response(‘pagination.html‘, RequestContext(request, {
        ‘lines‘: show_lines,
    }))

def demo_widgets(request):
    layout = request.GET.get(‘layout‘, ‘vertical‘)
    form = WidgetsForm()
    return render_to_response(‘form.html‘, RequestContext(request, {
        ‘form‘: form,
        ‘layout‘: layout,
    }))

剩下的就是模板目录templates 了,里面的html模板页面较多,我就不一一列出了。不过,现在最兴奋的就是去修改上面的文字,让其看起来更像我们自己的“网站”。

  在后面的学习中,我们将以此为基础进行。

时间: 2024-10-13 11:53:42

djngo快速实现--使用Bootstrap的相关文章

bootstrap 在django中的使用

 一.应用 http://www.bootcss.com/进入bootstrap4或bootstrap3中文网,想要快速地将 Bootstrap 应用到你的项目中,有以下两种办法:  1.bootstrap可以在线引用,方法如下: A.CSS 将引入 Bootstrap 样式表的 <link> 标签复制并粘贴到 <head> 中,并放在所有其他样式表之前. <!-- 引入 Bootstrap --> <link rel="stylesheet"

四款免费好用的Bootstrap ui编辑器

Bootstrap带来了设计革命,本文介绍的四种免费Bootstrap在线设计工具,可视化所见所得设计网页,然后输出Html/CSS代码,其中有些甚至可以实现拖曳,也有可以设定自己的主题模板Theme. 1. Layoutit LayoutIt通过使用我们的拖放界面生成器帮助您简单快速地创建Bootstrap前端代码.它陈列出Bootstrap的每个元素和组件,你只需要用鼠标拖曳到页面上即完成设计,让您的前端编码更容易,不需要你是javascript,HTML5或CSS3的专家.所有的设计可以是

Bootstrap的css

目录 前言 Bootstrap插件下载 Bootstrap表格和面板 增加数据,v-model和v-on 删除数据,事件修饰符和找索引的两种方法 查询数据,foreach和filter 全部的HTML 前言 Vue也学了好几章了,这次我们要自己来做一个demo,一个列表,能增删改查的东西,首先,我们得使用Bootstrap,这样好看,我到现在才终于明白了,所谓的好看就是Bootstrap的css,Bootstrap的表格,表单啥的都漂亮,美.而这些好看的表格,表单的交互,我们需要的是框架Vue.

[转] 提高前端性能方面的处理以及不足 ---张鑫旭

二.最最基本的 CSS顶部, JS底部 YUI compressor/Gzip CDN 有 必要的CSS Sprite Ajax可缓存 以上没什么好说的. 三.CSS渲染.页面重绘以及回流 尽量避免类似.a.b{}.list a{}以及其他一些复杂选择器,以提高整站整体CSS渲染. 避免某些expression表达式,避免IE6的AlphaImageLoader png透明滤镜,可以试试使用fireworks生成png8 alpha透明(目前photoshop只有png8 索引透明). 适当定高

BootStrap4 中文版

中文版网站:www.boot4.com 介绍 Bootstrap 是世界上最流行的用于建立响应式.移动设备为主的站点和应用的框架.在其中你可以发现高质量的 HTML.CSS 和 JavaScript 来让你的工程变得无比简单. 下面就是如何快速的上手 Bootstrap CDN 和建立一个模板页面. 目录 快速开始 起始模板 重要目标 HTML5 文档类型 响应式元标签 盒模型 Normalize.css 社区 快速开始 想要快速的将 Bootstrap 加入到你的工程中?那就使用 Bootst

&lt;转&gt;梳理:提高前端性能方面的处理以及不足

原文来自:张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com] 二.最最基本的 CSS顶部, JS底部 YUI compressor/Gzip CDN 有 必要的CSS Sprite Ajax可缓存 以上没什么好说的. 三.CSS渲染.页面重绘以及回流 尽量避免类似.a.b{}.list a{}以及其他一些复杂选择器,以提高整站整体CSS渲染. 避免某些expression表达式,避免IE6的AlphaImageLoader png透明滤镜,可以试试使用fireworks

使用wget命令爬取整站

快速上手(整个bootstrap网页全被你抓取下来了~_~) wget -c -r -npH -k -nv http://www.baidu.com 参数说明 -c:断点续传 -r:递归下载 -np:递归下载时不搜索上层目录 -nv:显示简要信息 -nd:递归下载时不创建一层一层的目录,把所有文件下载当前文件夹中 -p:下载网页所需要的所有文件(图片,样式,js文件等) -H:当递归时是转到外部主机下载图片或链接 -k:将绝对链接转换为相对链接,这样就可以在本地脱机浏览网页了 启用地址伪装 -u

Java后端学习

学习路线: Java基础--->HTML/CSS/JS(前端页面)--->Servlet/JSP(J2EE)(马士兵的视频).Mysql(数据库) --->Java Web框架(spring.springmvc.mybatis) ---找到工作:Java基础的升级版---<Java编程思想> ---1~2年:看设计模式---<大话设计模式>,写博客(还需要看:代码编写优化的书.比如<重构 改善既有代码的设计>,<effective java>

python全栈开发教程目录

python入门到进阶 Python基础2——数据类型的操作 Python基础——函数入门 Python基础——函数进阶 Python基础——函数的装饰器 Python基础——函数的装饰器 Python基础——函数的迭代器和生成器 Python基础——内置函数 数据库教程 Windows系统下安装MySQL详细教程(命令安装法) MySQL第一讲 一一一一 数据库入门 MySQL第二讲 一一一一 MySQL语句进阶 MySQL第三讲 一一一一 视图.触发器.函数.存储过程 前端教程 jQuery