前一段时间,用Django搭建一个报表分析的网站;借此正好整理一下笔记。
1. 安装
python有包管理工具pip,直接cd Python27/Scripts
,输入
pip install django# install by versionpip install --upgrade Django==
安装完成后,python -c "import django; print(django.get_version())"
,若能打印出Django的版本信息,即说明安装成功。一般地,Django安装在Python27/Lib/site-package/django
目录。
2. Django介绍
项目
Django的架构是MTV(Model-Template-View)。输入命令
python/Python27/Lib/site-packages/django/bin/django-admin.py startproject mysite
创建mysite的Django项目,项目的文件目录如下:
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py
- 最外层的mysite目录包含了整个项目,与Django没有半毛钱的直接关系,可改名。
- manage.py提供对项目的命令行(command-line)操作,比如:python manage.py runserver开启服务,默认端口号为8000(若开启端口号为8888,则python manage.py runserver 8888)。
- 内层的mysite文件夹是python package,与项目名相对应。
__init__.py
为空文件,表示mysite是一个package。- settings.py为项目的配置文件。
- wsgi.py为WSGI-compatible web servers。
app
输入python manage.py startapp polls
,为项目创建了Polls app,文件目录结构如下:
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
app定义网站内容view与model层,view.py定义网站数据的获取,而网页格式规范是在HTML Template中所定义的。比如,在source.html中定义网页:
{% extends "base.html" %}{% block main %}
{ {firstWeekDay}} |
通过view层向html注入数据(通过context给HTML中定义变量赋值):
# views.pyfrom django.shortcuts import render_to_responsedef source(request): context = {} context.update(firstWeekDay=fourWeek[0]) return render_to_response('source.html', context)
上面通过命令建项目的方式可能过于繁琐,PyCharm是IDE中不错一个选择,可用来快速构建Django项目。
3. 实战
循环注入
Django支持注入数据的格式为迭代集合如tuple、list等,用for循环依次取出:
{ {firstWeekDay}} {% for pv in firstWeekPv %} { {pv}} {% endfor %} {% for ad in adParent %} { {ad.0}} { {ad.1}} { {ad.2}} { {ad.3}} {% endfor %}
静态导入
Django同时支持导入静态css、js文件等,建议使用绝对路径作为root;这些配置信息须在settings.py中添加:
STATIC_ROOT = '/to/static'# Static files (CSS, JavaScript, Images)# https://docs.djangoproject.com/en/1.7/howto/static-files/STATIC_URL = '/static/'# Additional locations of static filesSTATICFILES_DIRS = ( # Put strings here, like "/home/html/static" or "C:/www/django/static". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. ('css', os.path.join(STATIC_ROOT, 'css').replace('\\', '/')), ('js', os.path.join(STATIC_ROOT, 'js').replace('\\', '/')), ('images', os.path.join(STATIC_ROOT, 'images').replace('\\', '/')))
如此,可以在HTML中自由地导入相对路径了: