您的位置:首页 > 编程语言 > Go语言

Django 开发-视图开发

2016-06-02 22:50 686 查看

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',
)


好吧,视图就讲这么多了,这里就只大概讲一下实现框架。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  django