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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章