Django中app的urls的配置和基本的数据查询

本文介绍Django中的urls的配置:主项目与app之间的urls的配置,以及简单的用app/view.py 查询数据库,并显示在app/templates/xxxxxx.html中。

  • 配置app的urls
  • 数据库查询并显示到页面

一.根据前面两篇内容我们已经大致了解的了Django的项目结构,以及如何创建app,如何创建视图,接下来我们来给app创建一个模板(templates),并在模板中显示从view中返回的数据。总共分一下几个步骤:

  1. 创建模板
  2. 根据模板创建视图,在视图中完成数据查询
  3. 修改urls配置
  4. 访问测试
1.所谓的模板就是一个html文件,这个html文件必须放在你的app的templates文件夹下,然后在此html文件中编写接受数据的节点。用于显示查询结果。

我们创建如下模板文件,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配置的时候就因为版本问题纠结了半天,最后还是搞定了,学习的过程就是这样~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值