Django(part3)
- 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’
- 每个Views.py中的函数都是一个view,view的职责包括:
- 返回HttpResponse对象,包含返回内容
- raise an exception,如Http404等
- Template:
- django的TEMPLATE_LOADERS包含很多loader,loader确定如何去查找template
- django的template可以都放在一个template目录下,但通常各个app的template都放到自己的路径下,路径为polls/templates/polls/index.html,index.html就是template文件,app_directories.loader会按照这个路径查找templat
- 示例模板:
#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> - 为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> - 常用的函数:
- 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)的更多相关文章
- “全能”选手—Django 1.10文档中文版Part3
Django 1.10官方文档的入门教程已经翻译完毕,后续的部分将不会按照顺序进行翻译,而是挑重点的先翻译. 有兴趣的可以关注我的博客. 第一部分传送门 第二部分传送门 第四部分传送门 3.2 模型和 ...
- 实战Django:官方实例Part3
前面两个部分我们介绍了投票应用的框架和后台管理部分.接下来舍得要介绍这个应用面向用户的界面. 这里我们要引入一个新的概念,"视图".在Django中,视图是一根连接模型和模板的纽带 ...
- django官方文档学习-入门part3创建用户视图
一.官方的约定: 1.在django中有一个约定.那就是每一个app自己的模板最好放在自己app目录下的templates子目录下. 但是这个还没有完成.最好还是在templates目录下加一个app ...
- django入门-视图-part3
尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6511384.html 完全翻译自官方文档 https://docs.djangoproje ...
- 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 测试越 ...
- django with mysql (part-3)
step01: write second view-function vim views.py step02: configure your ( urls.py ) vim urls.py step0 ...
- 实战Django:官方实例Part4
上一个part我们创建了投票的内容页,但这个页面仅仅局限于静态展示,投票的"投"字还无从体现.接下来,我们就来看一下,如何把票投起来. 19.创建表单 我们来更新模板文件pol ...
- 实战Django:官方实例Part2
我们接着Part1部分往下讲.我们在part1中启动服务器后,并没有在管理页面中发现新添加的Polls应用,怎么办捏? 7.在管理界面中显示Question 只要注册一下这个应用就可以了.编辑poll ...
- 初步了解 Django Models
Part1:了解主键 1. Python和Django版本如下: E:\django>python3 -V Python 3.5.2 E:\django>python3 -m d ...
随机推荐
- 基于 Web 的 Go 语言 IDE - Wide 1.3.0 发布!
http://symphony.b3log.org/article/1437292757551 欢迎各位提意见.建议,参与到 Wide 开源项目中 :-)
- 教你用3ds max制作多边形小狗建模
本教程是一篇关于用3ds max来制作多边形小狗建模的简易教程,介绍地很详细,制作出来的狗很有特色,转发过来,感兴趣的朋友可以过来学习一下! 建立一个BOX,把物体放到空间原点上(这样在以后调节中间点 ...
- LeetCode Golang 单向链表相加 反向实现
LeetCode 两数之和, 反向实现 1 -> 2 -> 3 -> 4 + 3 -> 4 ------------------------- ...
- day06-2 基本运算符(解压缩)
目录 运算符 算数运算符 比较运算符 赋值运算符 逻辑运算符 运算规则 成员运算符 身份运算符 Python运算符优先级 链式赋值(必考) 交叉赋值(必考) 解压缩(必考) 运算符 算数运算符 进行算 ...
- spring使用注解开发
1.准备工作(1)导入common-annotations.jar(2)导入schema文件 文件名为spring-context-2.5.xsd(3)在xml的beans节点中配置 service层 ...
- 初见UDP_Server
from socket import *ip_prot = ('192.168.55.1',8080)buffer_size = 1024udp_sever = socket(AF_INET,SOCK ...
- bootstrap fileinput控件 + django后台上传、回显简单使用
一.控件下载:https://github.com/kartik-v/bootstrap-fileinput/ 官网:http://plugins.krajee.com/file-input 需要引入 ...
- (原创)Java 读取 Highcharts 中的图片
前言:项目中提出一个新需求,就将Highcharts中的图片读取到Excel中.并在前台做下载,当听到这功能,第一想法是需要由后台编写程序,将数据写道图片中. 虽然没做过但是也没觉得太难,毕竟前辈们肯 ...
- 移动端rem自适应设置
对于移动端自适应各种终端的解决方案较多,本篇只是选择其中一种rem适配,我个人做移动端最喜欢的方案. rem就是以html根元素的字体大小为参考,比如html:font-size:20px;1rem= ...
- 【HDU 6299】Balanced Sequence
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 我们贪心地把每一个括号序列能匹配都按照栈的规则都匹配出来. (直接递增匹配对数*2就可以了 最后栈里面就只剩下类似))))((((( ...