Django学习之视图与模板(一)

在学习视图与模板之前,我们得了解Django运行方式及处理流程,参考http://segmentfault.com/a/1190000002399134

  • 第一个页面

首先,我们来写第一个视图函数,这个视图函数返回一个显示“Hello,world.You're at the blogs index"内容的httpResponse对象

from django.shortcuts import render
from blog.models import Blog

def index(request):
    blogs=Blog.objects.all()
    return render(request,'blog/index.html',{})

为了能访问到该页面,我们需要将该视图函数与urlconf中的条目进行映射。所以y我们需要修改URLConf。

首先修改myproject/urls.py

 1 from django.conf.urls import patterns, include, url
 2 from django.contrib import admin
 3 
 4 urlpatterns = patterns('',
 5     # Examples:
 6     # url(r'^$', 'myproject.views.home', name='home'),
 7     # url(r'^blog/', include('blog.urls')),
 8     url(r'^blogs/',include('blog.urls')),  //如果url中包含blogs,那么我们将调用blog.urls。
 9     url(r'^admin/', include(admin.site.urls)),
10 )

接着我们修改blog/urls.py

from django.conf.urls import patterns,url

from blog import views

urlpatterns = patterns('',
        url(r'^$',views.index,name='index'),
)

重新启动服务器python manage.py runserver

在浏览器页面输入http://127.0.0.1:8000/blogs/

"TemplateDoesNotExit at /  ",模块不存在,找不到blog/index.html。

那么我们应该创建模块。

在myproject下面新建一个新的目录templates,然后在templates目录新建目录blog

在blog新建index.html,内容如下:

<!DOCTYPE html>
<html>
    <p>Hello,world!You're at the blogs index.</p>
</html>

然后,我们重启服务器,在浏览器页面输入http://127.0.0.1:8000/blogs/。我们就能在页面看到”Hello,world!You're at the blogs index.“的内容了。

现在我们来说一下urls.py,urls.py里面中处理url和视图绑定的函数是url函数。

url函数传递4个参数,两个是必选参数:regex(正则表达式)和view(视图函数),两个可选参数:kwargs和name。

regex:正则表达式,它是用来匹配字符串模式的一种语法。在这里主要是匹配URL。

view:当Django为某个url找到一个正则匹配条目,Django就会去调用特定的视图函数,而且Django会将HttpRequest对象作为第一个参数和任何被正则表达之获取的参数一同传递给视图函数。

kwargs:任意关键词都能以字典的形式传递给目标视图函数。

name:给你的URL命名会让你在Django的任意地方特别是模板都能清楚的查询它。

  • 真正做些事

现在让我们在页面真正的显示一些我们想要的内容。

首先我们来修改一下blog/templates/blog/index.html

<!DOCTYPE html>
<html>
        <head>
                <title>My Blog</title>
        </head>
        <body>
                {% if blogs %}
                {% for blog in blogs %}
                <h2>{{blog.title}}</h2>
                <p>Published {{blog.published_time}}</p>
                <p>{{blog.text | linebreaks}}</p>
                {% endfor %}
                {% else %}
                <p>No blog was published</p>
                {% endif %}
        </body>
</html>

接着,我们得修改blog/views,

from django.shortcuts import render
from blog.models import Blog

def index(request):
    blogs=Blog.objects.all()
    return render(request,'blog/index.html',{'blogs':blogs})

然后,我们重启服务器,在浏览器页面输入http://127.0.0.1:8000/blogs/

恩,还有点问题为什么Published后面不是时间而是None呢,因为我们在刚开始添加文章的时候没有选择Published_time。现在我们进入admin页面,将每个Blog的Published_time填上,就能显示时间了。最终的显示效果如下

原文地址:https://www.cnblogs.com/tmyyss/p/4372103.html