Django 笔记:一、工程部署;模板(template)的使用

最近在捣腾Django,把过程记录一下,方便以后查找

1、新建工程和部署

django install
django-admin.py startproject Test
django-admin.py startapp blog
vim settings.py
    app add----->blog
vim urls.py
    add--->url(r'^blog/index/$','blog.views.index')
vim blog/views.py 
    from django.http import HttpResponse

    def index(req):
        return HttpResponse('<h1>Hello</h1>')

笔记:

django的安装比较简单,下载源代码后,解压,sudo python setup.py install 就可以完成

django-admin.py startproject Test 该命令是为了建立一个新的django工程 名字为Test

django-admin.py startapp blog 该命令则是在在当前目录下面建立新的app,名字为blog

剩下部分则是django的核心,首先,我们要在当前的project中,加入新建的app,主要是在setting.py中进行设置。当django接受到Http请求之后,会首先分析其URL,就是我们在urls.py中所配置的,然后根据配置,找到相应的view,然后将内容显示出来。

既然分析到这,好好看一下官方的documents,https://docs.djangoproject.com/en/1.5/topics/http/urls/

http://www.w3.org/Provider/Style/URI该链接里面一个讲URL规范的,怎么的URL才叫好的URL,现在自己太搓,记一下,回头再看。

2、第二个视频,则主要讲了django的模板, 里面有一个工具特别好用,bluefish,后来一搜索,原来是很多搞Web专用的。

模板的主要用法,则是,首先新建一个模板 比如 blog/templates/index.html,其内容如下:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Title</title>
</head>
<body>
<h1>Body Here</h1>
</body>
</html>

然后修改 blog目录下的view.py,方法一为

from django.http import HttpResponse
from django.template import loader,Context

def index(req):

	t=loader.get_template('index.html')
	c=Context({})
	return HttpResponse(t.render(c));

简单理解,就是导入模板,导入上下文,然后使用模板中的render函数进行渲染,然后呈现出来。

方法二

from django.http import HttpResponse
from django.shortcuts import render_to_response

def index(req):
	return render_to_response('index.html',{})

该方法则是上面方法的简化,使用django.shortcuts类中的render_to_response方法,第一个参数为模板文件,而第二个函数为渲染的上下文。

3、模板的变量

在模板文件(一般*.html文件中)使用{{}}来表示变量,然后在render中传递过去如,首先将模板文件修改为:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>{{title}}</title>
</head>
<body>
<h1>Hello {{user}}</h1>
</body>
</html>

而视图文件views.py

from django.http import HttpResponse
from django.shortcuts import render_to_response

def index(req):
	c={'title':"title",'user':'Happy'}
	return render_to_response('index.html',c)

注意到,这是后,我们传进去的是一个字典,而html中都是直接显示的,而字典中中的值,有可以是字典,所以我们进一步修改。

同样的,作为基本类型,列表也是可以被作为参数传入模板中,

同样的,还可以将类的方法传入模板,需要注意的,此时的方法,为无参方法,同时,该方法需要有返回值,综合以上几个,可以进行以下的修改。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>{{title}}</title>
</head>
<body>
<h1>Hello {{user.name}}</h1>
<li>Age: {{user.age}}</li>
<li>Sex: {{user.sex}}</li>
<br />
<li>{{user.name}} say:{{user.say}}</li>
<br />
<li>List0:{{list.0}}</li>
<li>List1:{{list.1}}</li>
</body>
</html>

视图文件为

from django.http import HttpResponse
from django.shortcuts import render_to_response

class Person:

	def __init__(self,name,age,sex):
		self.name=name
		self.age=age
		self.sex=sex

	def say(self):
		return "Haha!"

def index(req):
	tom=Person('Tom',2,'Male')
	mylist=['list1','list2']
	c={'title':"title",'user':tom,'list':mylist}
	return render_to_response('index.html',c)

最终运行的程序结果为:

Hello Tom

  • Age: 2
  • Sex: Male

 

  • Tom say:Haha!

 

  • List0:list1
  • List1:list2

 

About: happyhls


发表评论

电子邮件地址不会被公开。 必填项已用*标注