1. URLConf:负责url到view的map,就是一个urls.py module,通常在project和app级别都要定义,

    #mysite/urls.py
    from django.conf.urls import patterns, include, url
    from django.contrib import admin urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', include(admin.site.urls)),
    ) #polls/urls.py
    from django.conf.urls import patterns, url
    from polls import views urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    #name是url的名字,可以在template中使用 url(r'^(?P<question_id>\d+)/$', views.detail, name='detail'),
    )

    如果要去到”/polls/34/”,django的处理如下:

    • 首先根据setting.py中指定的ROOT_URLConf的值,本例是mysite.urls,django会load mysite.urls.py module
    • django会发现’^polls/’与”/polls/34/”匹配,不管/polls/后面是id还是其他内容都匹配
    • django会把”/polls/34/”中与regex匹配的字符串去掉,将剩下的”34/”传给polls.urls,与polls.urls中的regex匹配后会传参调用views.detail(request=<HttpRequest object>,question_id=’34’
  2. 每个Views.py中的函数都是一个view,view的职责包括:
    • 返回HttpResponse对象,包含返回内容
    • raise an exception,如Http404等
  3. Template:
    • django的TEMPLATE_LOADERS包含很多loader,loader确定如何去查找template
    • django的template可以都放在一个template目录下,但通常各个app的template都放到自己的路径下,路径为polls/templates/polls/index.html,index.html就是template文件,app_directories.loader会按照这个路径查找templat
  4. 示例模板:
    #polls/templates/polls/detail.html
    <h1>{{ question.question_text }}</h1>
    <ul>
    {% for choice in question.choice_set.all %}
    <li>{{ choice.choice_text }}</li>
    {% endfor %}
    </ul>

    question.choice_set.all会被解析成python代码question.choice_set.all(),如果要在模板里添加hyperlink,可以使用如下方式:

    <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    
    #使用这种方式更好,可以去掉hardcode, ‘detail’是在urls.py中定义的url的名字
    <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
  5. 为url指定名字空间,防止不同app的view同名
    #mysite/urls.py
    from django.conf.urls import patterns, include, url
    from django.contrib import admin urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),
    ) #引用url时要加名字空间
    <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
  6. 常用的函数:
    • patterns(prefix,patterns):参数包含一个prefix和任意数量的url patterns,然会url patterns列表
    • url(regex,view,kwargs,name):
        • regex:匹配url的正则表达式
        • view:regex匹配时,django会调用view,以HttpRequest对象作为第一个参数,regex捕获的其他匹配值作为其他参数。如果是simple capture,则值会按顺序依次传给view的函数,如果是named capture,值会作为keyword arguments
        • kwargs:keyword arguments,kwargs存入字典再传给view,很少用
        • name:给url命名
    • include():引入URLConf
    • render(request,templatepath,…):
      • request:HttpRequest对象
      • templaepath:template文件路径
    • get_object_or_404(model,id): 如下代码等同
      #效果等同
      try:
      question = Question.objects.get(pk=question_id)
      except Question.DoesNotExist:
      raise Http404 question = get_object_or_404(Question, pk=question_id)
    • get_list_or_404():内部使用filter()函数而不是get()函数,list是空,rasie Http404

Django(part3)的更多相关文章

  1. “全能”选手—Django 1.10文档中文版Part3

    Django 1.10官方文档的入门教程已经翻译完毕,后续的部分将不会按照顺序进行翻译,而是挑重点的先翻译. 有兴趣的可以关注我的博客. 第一部分传送门 第二部分传送门 第四部分传送门 3.2 模型和 ...

  2. 实战Django:官方实例Part3

    前面两个部分我们介绍了投票应用的框架和后台管理部分.接下来舍得要介绍这个应用面向用户的界面. 这里我们要引入一个新的概念,"视图".在Django中,视图是一根连接模型和模板的纽带 ...

  3. django官方文档学习-入门part3创建用户视图

    一.官方的约定: 1.在django中有一个约定.那就是每一个app自己的模板最好放在自己app目录下的templates子目录下. 但是这个还没有完成.最好还是在templates目录下加一个app ...

  4. django入门-视图-part3

    尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6511384.html 完全翻译自官方文档 https://docs.djangoproje ...

  5. Django 1.10文档中文版Part3

    目录 2.7 第一个Django app,Part 5:测试 2.7.1 自动化测试介绍 2.7.2 基本的测试策略 2.7.3 编写我们的第一个测试程序 2.7.4 测试一个视图 2.7.5 测试越 ...

  6. django with mysql (part-3)

    step01: write second view-function vim views.py step02: configure your ( urls.py ) vim urls.py step0 ...

  7. 实战Django:官方实例Part4

    上一个part我们创建了投票的内容页,但这个页面仅仅局限于静态展示,投票的"投"字还无从体现.接下来,我们就来看一下,如何把票投起来.   19.创建表单 我们来更新模板文件pol ...

  8. 实战Django:官方实例Part2

    我们接着Part1部分往下讲.我们在part1中启动服务器后,并没有在管理页面中发现新添加的Polls应用,怎么办捏? 7.在管理界面中显示Question 只要注册一下这个应用就可以了.编辑poll ...

  9. 初步了解 Django Models

    Part1:了解主键 1.      Python和Django版本如下: E:\django>python3 -V Python 3.5.2 E:\django>python3 -m d ...

随机推荐

  1. layer Tips参数使用

    layer.tips(content, follow, options) - tips层type:4的深度定制.也是我本人比较喜欢的一个层类型,因为它拥有和msg一样的低调和自觉,而且会智能定位,即灵 ...

  2. DataBaseFactory基础了解

     <add name="Connection str" connectionString="data source=.;pwd=12;uid=sa;database ...

  3. poj 2135 Farm Tour【 最小费用最大流 】

    第一道费用流的题目--- 其实---还是不是很懂,只知道沿着最短路找增广路 建图 源点到1连一条容量为2(因为要来回),费用为0的边 n到汇点连一条容量为2,费用为0的边 另外的就是题目中输入的了 另 ...

  4. POJ 3624 Charm Bracelet【01背包】

    解题思路:直接套公式就能做的01背包, for(i=1;i<=n;i++) { for(v=w[i];v<=m;v++) f[i,v]=max(f[i,v],f[i-1,v-w[i]]+d ...

  5. ZBrush中的实时遮罩

    在ZBrush®中有许多遮罩类型,包括柔滑遮罩.反转遮罩,实时遮罩等.其中,实时遮罩又包含很多种类,它不同于一般的遮罩是不显示的,实时遮罩是根据实时信息产生新的遮罩. 在“Brush”菜单下“Auto ...

  6. ZBrush中移动笔刷介绍

    移动笔刷是ZBrush®笔刷中举足轻重的一项,利用移动笔刷可以实现移动顶点的功能,还能改变模型的某一个点和某一位置.本文内容向大家介绍ZBrush®中移动笔刷以便大家熟悉它的用法和特性. 移动笔刷 可 ...

  7. jenkins 展示报告

    1.下载插件 HTML Publisher plugin 2.设置说明 3.展示css 下载插件 (1).Startup Trigger: 可实现在Jenkins节点(master/slave)启动时 ...

  8. JS取出特定字符前后的字符串,针对一串字符里面的单个字符前后的字符串

    //针对一串自负里面的单个字符前后的字符串<!doctype html> <html> <head> <meta charset="utf-8&qu ...

  9. Linux(1)---常用命令

    1.将tgz文件解压到指定目录: # tar zxvf test.tgz -C 指定目录 比如将 /lyl/test.tgz解压到 /lyl/linux 目录下 # tar zxvf /lyl/tes ...

  10. HDU 5918 Sequence I

    题目来源:2016 CCPC 长春站 题意:给出两个序列 a[] , b[] ,如果b1,b2....bm能够与aq,aq+p,aq+2p...aq+(m-1)p对应( q+(m-1)p<=n ...