关注微信公众号 太平洋学习网 扫描二维码
最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

django入门10:django的urls,views以及models之间的关系复习

扩展 太平洋学习网 浏览 评论

 在django入门1:django框架的简介与内部执行流程分析 这一章节中我们介绍到了我们的url请求是通过urls.py中的url正则表达式匹配,然后才找到views.py中的处理方法的,或者是可以直接根据name=“xxx"来找到views.py中的处理方法方法,例如。

<a href="{% url 'user_detail' pk=user.id %}">查看</a>

1这是根据用户id查询用户详细资料的请求url格式,这是django特有的,再介绍一遍,{%%}里面的内容。

第一个'url'参数是固定写法。

第二个参数‘user_detail’就是上面所说的name='xxx'。

第三个参数'pk=user.id' 就是我们要传给后台的用户id,‘pk’就是id的意思,也可以写成id=user.id。

2:当我们在点击查看的链接时,它就会到blog/urls.py里面根据name='user_detail' 的这个name找到views.py里面的处理方法,先看看blog/urls.py里面的内容,如下

from django.conf.urls import url
from .import views
urlpatterns = [
    # 跳转到用户详细页面(参数1:正则表达式url,参数2:views里面对应的处理方法,参数3:name='user_detail')
    url(r'^user/detail/(?P<pk>[0-9]+)/$', views.user_detail, name='user_detail'),
]

3:然后它会根据blog/urls.py里面的这个name发现views.py里面的处理方法是user_detail,于是它就找到了views里面的这个根据id查询用户信息的方法,如下。

# 跳转到用户详细信息pk就是id,随便选
def user_detail(request, pk):
    user = get_object_or_404(User, id=pk)
    # 跳转到对应的模板页面
    return render(request, 'user/user_detail.html', {'user': user})

看了上面的这几个步骤,你一定会疑问,不是直接可以通过name找到views.py里面的处理方法了吗?那这样urls.py里面为什么还要用url正则表达式呢?先看看正则表达式,如下。

r'^user/detail/(?P<pk>[0-9]+)/$'

先学学django正则表达式。

^ 表示文本的开始
$ 表示文本的结束
\d 表示数字
+ 表示前面的元素应该重复至少一次
() 用来捕捉模式中的一部分

这句话的意思是说我们可以通过http://127.0.0.1:8000/user/detail/1/ 来访问用户详细信息,那么你不是要给views.py一个id吗?我怎么知道到底“1”是参数还是“detail”是参数,因此我们就会在 [0-9]+ 的前面加上了"?P<>"这样的格式,它表示<>里面的pk(即id)就是要传给后台views.py的参数,也就是上面<a>标签href里面的第三个参数。

完成之后,页面通过{{}}取值,代码如下。

<body>
这是姓名:{{ user.username }}用户的详细信息页面
</body>

QQ截图20170926213005.jpg

注意:看这个案例之前请结合前面几节的教程,不然可能看不懂。

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/kuozhan/2017/0926/244.html