本文介紹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配置的時候就因爲版本問題糾結了半天,最後還是搞定了,學習的過程就是這樣~