1.简述

  1.1 开发环境

  该笔记所基于的开发环境为:windows8、python2.7.5、psycopg2-2.4.2、django1.5.4、pyCharm-2.7.3。以上所描述的软件、插件安装、破解等可以参考之前的python笔记,提供了具体的资源链接和操作步骤。

  1.2 django学习笔记简介

  django学习基于官网提供的投票应用,是学习该应用编写过程中,遇到的问题、知识点、注意问题等的总结,同时包含大量学习过程中的截图,方便大家更直观的学习。  

  它将包含两部分:

    一个公共网站,可让人们查看投票的结果和让他们进行投票。

    一个管理网站,可让你添加、修改和删除投票项目。

  官网文档链接为http://django-chinese-docs.readthedocs.org/en/latest/

    

  1.3 关于笔记

  同样作为初学者,写这篇文章时,刚刚看到教程的第4部分,笔记中有不足之处,还希望大家指正,真心与大家共同讨论学习!

2.关于视图 

  在 Django 应用程序中,视图是一“类”具有特定功能和模板的网页。在我们的 poll 应用程序中,将有以下四个视图:

  • Poll “index” 页 – 显示最新发布的民意调查。
  • Poll “detail” 页 – 显示一项民意调查的具体问题,不显示该项的投票结果但可以进行投票的 form 。
  • Poll “results” 页 – 显示一项给定的民意调查的投票结果。
  • 投票功能 – 为一项给定的民意调查处理投票选项。

------------------------------------------------

  博主经营一家发饰淘宝店,都是纯手工制作哦,开业冲钻,只为信誉!需要的亲们可以光顾一下!谢谢大家的支持!
店名:
  小鱼尼莫手工饰品店
经营:
  发饰、头花、发夹、耳环等(手工制作)
网店:
  http://shop117066935.taobao.com/

---------------------------------------------------------------------

继续正题...   

 
3.创建视图
3.1 views.py中创建第一个视图(简单示例)
    a).  打开文件 polls/views.py 并在其中输入以下 Python 代码
# views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the poll index.")

b).在 polls 目录下创建一个名为 urls.py 的 URLconf 文档。 你的应用目录现在看起来像这样

      img?
    c).  在 polls/urls.py 文件中输入以下代码:
# polls/urls.py
from django.conf.urlsimport patterns, url
from pollsimport views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'))

d).将 polls.urls 模块指向 root URLconf 。在 mysite/urls.py 中插入一个 include() 方法,最后的样子如下所示

# mysite/urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls')),
url(r'^admin/', include(admin.site.urls)),)

说明:

     views.py中定义页面要显示的内容
     polls/urls.py中定义polls模块的url,即访问路径和相应视图的关系
     mysite/urls.py是url的总入口,在urlpatterns中引入polls下的urls,从而建立对polls模块的链接关系
运行效果:
     
3.2 url参数    
url(regex, view ,kwargs, name)
eg:
# /polls/
url(r'^$', views.index, name='index')
# /polls/5
url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
# /polls/5/results
url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),

3.3在视图中添加实际功能

     显示系统中最新发布的 5 个调查问题,以逗号分割并按发布日期排序
from django.http import HttpResponse
from polls.models import Poll
def index(request):
latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
output = ', '.join([p.question for p in latest_poll_list])
return HttpResponse(output)

运行效果:

     img?
3.4 模版的创建与使用

  templates目录下,另外创建个名为 polls 的目录,并在其中创建一个 index.html 文件。换句话说,你的模板应该是 polls/templates/polls/index.html
  img?
  模版文件
{% if latest_poll_list %}
<ul>
{% for poll in latest_poll_list %}
<li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>
{% endfor %}
</ul>{% else %}
<p>No polls are available.</p>
{% endif %}

  view.py视图文件

from django.http import HttpResponse
from django.template import Context, loader
from polls.models import Poll
def index(request):
latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
template = loader.get_template('polls/index.html')
context = Context({
'latest_poll_list': latest_poll_list,
})
return HttpResponse(template.render(context))

3.5 render渲染方法(快捷方式)

def index(request):
latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
context = {'latest_poll_list': latest_poll_list}
return render(request, 'polls/index.html', context)

ps: 此时,不再需要导入 loader , Context 和 HttpResponse

 
3.6 http404异常的抛出
from django.http import Http404
# ...
def detail(request, poll_id):
try:
poll = Poll.objects.get(pk=poll_id)
except Poll.DoesNotExist:
raise Http404
return render(request, 'polls/detail.html', {'poll': poll})
# template:polls/details.html
{{ poll }}
#快捷方式
from django.shortcuts import render, get_object_or_404
# ...
def detail(request, poll_id):
poll = get_object_or_404(Poll, pk=poll_id)
return render(request, 'polls/detail.html', {'poll': poll})

3.7 编写404视图??? 未完成

3.8 编写500视图??? 未完成
3.9 使用模版系统
  模板系统使用了“变量.属性”的语法访问变量的属性值
<h1>{{ poll.question }}</h1>
<ul>
{% for choice in poll.choice_set.all %}
<li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>
 
4. 移除模版中的硬编码url
4.1 去除url
     html模版中移除url
<li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>
<li><ahref="{%url'detail'poll.id%}">{{poll.question}}</a></li>

可在url中统一修改url值

url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
url(r'^specifics/(?P<poll_id>\d+)/$',views.detail,name='detail'),

4.2 Namespacing URL names URL 名称的命名空间

  url定义时,添加namespace

from django.conf.urls import patterns, include, url
from django.contrib import adminadmin.autodiscover()
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls', namespace="polls")),
url(r'^admin/', include(admin.site.urls)),)

  视图添加namespace

<li><ahref="{%url'polls:detail'poll.id%}">{{poll.question}}</a></li>

ps: 视图文件修改阶段

#最初,在视图中写下相对路径
#当后期需要修改时会很麻烦,因为相应的每一个视图文件都需要修改
<a href="/polls/{{ poll.id }}/">
#后期,相对于url定义的detail名称 
#仍有问题,即多模块都有detail时会出现问题
<a href="{% url 'detail' poll.id %}">
# 最后,使用命名空间,明确是polls模块的detail
# 后期若需要修改,只需要修改相应的url定义即可,不必修改视图文件;区分多模块detail冲突
<a href="{% url 'polls:detail' poll.id %}">
{{ poll.question }}
</a>

店名:
  小鱼尼莫手工饰品店
经营:
  发饰、头花、发夹、耳环等(手工制作)
网店:
  http://shop117066935.taobao.com/

最新文章

  1. Highcharts 总结
  2. PHP-----数组和常见排序算法
  3. github pages 添加godaddy的dns解析
  4. Verify Preorder Serialization of a Binary Tree
  5. Tomcat:配置虚拟目录或主目录
  6. [Guava官方文档翻译] 6. 用Guava辅助Throwable异常处理 (Throwables Explained)
  7. log4j中存在日志无法打印问题解决
  8. 跨时钟域设计【一】——Slow to fast clock domain
  9. mysql分表方法实现
  10. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session
  11. OC语法1——OC概述
  12. POJ 2506 Tiling
  13. 过滤html标签
  14. 思科模拟器PacketTracer7-----2台PC通过交叉线互连
  15. 洛谷P1582 倒水题解
  16. [转]Centos7 fastdfs/nginx 安装与配置
  17. web状态管理机制
  18. [POI2011]Inspekcja
  19. Git clone 常见用法
  20. Oracle SCN机制解析

热门文章

  1. linux中显示有颜色的字符
  2. docker dockerfile构建自己的tomcat镜像
  3. IOS端的摇一摇功能
  4. 泛泰A870K去掉相机快门声音的方法
  5. cocos2d-x 3.0 在C++中调用lua函数(2)
  6. Django SimpleCMDB WSGI
  7. Tiny6410 关于制作ubifs文件系统映像
  8. FPGA连接
  9. [JS] 如何自定义字符串格式化输出
  10. STL——迭代器与traits编程技法