Django 开发-视图开发
前面一篇文章说了了怎么建立应用的数据模型,怎样通过管理站点管理应用的数据。这篇文章继续讲一下,怎样将数据在页面上显示。
当用户去访问网站的时候,Django服务器在接收到请求的时候,首先回去匹配URLCONF, 这个在setting.py文件中进行配置
ROOT_URLCONF = 'mysite.urls'
mysite目录下的urls.py内容如下
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^polls/', include('polls.url')),
]
url(r’^admin/’, include(admin.site.urls))的意思是,如果在url中匹配上了admin,就继续匹配admin.site.urls应用的urls,这样可以看到,如果每个应用都维护自己的urls,就能做到各个应用即插即用。
同理url(r’^polls/’, include(‘polls.url’)),表示如果在url中匹配上了polls,表示继续查找polls下面的url文件。在这个项目中,url.py是我新增加的一个文件。
polls/url.py 文件
from django.conf.urls import url,include
from . import views
urlpatterns = [
# ex: /polls/
url(r'^$', views.index, name='index'),
]
上面的url(),第一个参数表示匹配的模式,第二个参数表示匹配上之后,要执行的view,第三个参数,是给这个url命个名字。所以上面的url说明,如果没有任何数据(^表示匹配字符串的起始、$表示匹配字符串的结束),就行执行views模块的index函数。
所以应该你也猜到了,那我们需要在views模块中加入这个函数。
/polls/views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
from models import Question
def index(request):
output = "hello world"
#必须返回HttpResponse
return HttpResponse(output)
先看看效果,是不是感觉很简单。
这里说一下URLCONF的匹配顺序,http://192.168.255.141:8000/polls/, 首先用mysite/urls.py进行匹配,会匹配上 url(r’^polls/’, include(‘polls.url’))条目,所以会继续匹配polls/url.py,因为访问的url中/polls/没有任何内容,所以正好满足url(r’^$’, views.index, name=’index’), ,会执行views模块的index函数。
/polls/views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
from models import Question
def index(request):
def index(request):
output = "<title>Hello,goodnight! </title><h1>fighting</h1>"
return HttpResponse(output)
直接把网页代码写到python代码里面就麻烦了,更该个网页还得更改代码,所以别急,肯定会有更好的办法,其中一个好办法就是使用html模板。
首先在polls 目录下面创建一个templates目录,后面再说为什么要创建templates目录。然后再templates目录下创建个index.html。
/polls/templates/index.html
<title> view template!</title>
<hi>templates?</hi>
重写前面views模块的index
/polls/views.py
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, 'index.html')
这里直接用了快捷键的方式使用模板,其实还可以使用django.template 模块的RequestContext, loader,同样可以实现该功能。看看效果
接着说前面留下的问题,为什么需要在polls下创建templates目录。
那是跟django查找模板的方式有关,django查找模板的方式是依次查找setting.py中INSTALLED_APPS注册的各种应用目录下template目录。
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
好吧,视图就讲这么多了,这里就只大概讲一下实现框架。