本文介绍Django中的urls的配置:主项目与app之间的urls的配置,以及简单的用app/view.py 查询数据库,并显示在app/templates/xxxxxx.html中。
- 配置app的urls
- 数据库查询并显示到页面
一.根据前面两篇内容我们已经大致了解的了Django的项目结构,以及如何创建app,如何创建视图,接下来我们来给app创建一个模板(templates),并在模板中显示从view中返回的数据。总共分一下几个步骤:
- 创建模板
- 根据模板创建视图,在视图中完成数据查询
- 修改urls配置
- 访问测试
我们创建如下模板文件,achive.html
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<meta name="keywords" content="关键字"/>
<meta name="description" content="this page is my first customize teach bolg,welcome!----mingwei"/>
<title>Mingwei's Blog</title>
</head>
<body>
<lable>This is my technical blog</lable>
{% for post in posts %}
<h2>{{post.blog_title}}</h2>
<p>{{post.blog_timestamp}}</p>
<p>{{post.blog_body}}</p>
{% endfor %}
</body>
</html>
说明:
大括号括起来的是变量标签({{}}),用于显示传递给模板的数据,在变量标签中,你可以用python风格的dotted-notaion(也就是".")来访问传递给模板的对象的属性,例如传递了一个post,就可以用post.blog_title来访问post对象的title属性。
块标记({%%}),里面的for循环用块标记,和python的语法是一样的。
创建好blog/templates/achive.html的项目结构如下:
mingwei@mingwei:~/mysite$ tree
.
├── blog
│ ├── admin.py
│ ├── admin.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── models.py
│ ├── models.py~
│ ├── models.pyc
│ ├── templates
│ │ ├── archive.html
│ │ └── archive.html~
│ ├── tests.py
│ ├── urls.py
│ ├── urls.py~
│ ├── urls.pyc
│ ├── views.py
│ ├── views.py~
│ └── views.pyc
├── db.sqlite3
├── manage.py
└── mysite
├── __init__.py
├── __init__.pyc
├── settings.py
├── settings.py~
├── settings.pyc
├── urls.py
├── urls.py~
├── urls.pyc
├── wsgi.py
└── wsgi.pyc
2.下面我们来创建视图
mysite/blog/views.py
from django.shortcuts import render
from django.template import loader,Context
from django.http import HttpResponse
from blog.models import BlogPost
# Create your views here.
def archive(request):
posts=BlogPost.objects.all();
t=loader.get_template("archive.html")
c=Context({'posts':posts})
return HttpResponse(t.render(c))
def hello(request):
return HttpResponse('<html>hello world</html>')
说明:
7行:每个django的视图函数都以django.http.HttpResponse作为它的第一个参数,还可以通过urlConf接受其他的参数
8行:BlogPost集成了Model之后就获取了所有Model的功能,这一行我们查询了数据库里所有的BlogPost数据
9行:根据模板的名字来创建模板对象t,django会自动在templates中找到模板。
10行:模板渲染的数据是有一个字典类型的对象Context提供,这里的Context c只有一对 建-值
11行:django的视图函数返回一个django.http.HttpResponse对象,最简单的是给构造函数传递一个字符串,这里的render方法返回的正式一个字符串
至此,模板和数据查询就写完了。
3.修改urls配置,我们为了能够让urls里访问到blog下的视图,要在mysite/urls.py下添加一行
url(r'^blog/',include('blog.urls')) 指向blog下的urls.py
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'hello','blog.views.hello'),
url(r'^blog/',include('blog.urls')),
]
注意:这里的部分网上有的这样的:
urlpatterns = patterns('',
(r'^admin/', include('django.contrib.admin.urls')),
)
可以发现一个识列表List,另一个不是,说是Django的版本导致的,前者识最新的,后者是之前的不知道哪个版本,我试了后面的,但是不行。
4.修改blog/urls.py文件
默认的情况下,blog下面识没有这个文件的,所以我把外面的那个复制了进去,然后修改成了这样:
from django.conf.urls import include, url
from blog.views import archive
urlpatterns = [
url(r'^$',archive),
]
看,这里的 from blog.view improt archive 就是指向前面view.py中的archive视图函数。
到此,所有的工作就完成了,就剩下测试了,django的测试服务一直处于启动状态,我们直接输入url测试:http://127.0.0.1:8000/blog/
看,页面就出来了吧!
This is my technical blog
My first blog
Oct. 21, 2014, midnight
This is content, Django is lightweight Web Framework
当然,博主在测试的时候也是遇到了各种问题,并不是一次就写成的,在urls配置的时候就因为版本问题纠结了半天,最后还是搞定了,学习的过程就是这样~