博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python(8)——Django之URL配置
阅读量:6684 次
发布时间:2019-06-25

本文共 2290 字,大约阅读时间需要 7 分钟。

  hot3.png

1、URL分类:
urlpatterns = patterns('',(r'^hello/$', 'mysite.views.hello'),(r'^time/$', 'mysite.views.current_datetime'),(r'^time/plus/(\d{1,2})/$', 'mysite.views.hours_ahead'),(r'^tag/(\w+)/$', 'weblog.views.tag'),)
写成:
from django.conf.urls.defaults import *urlpatterns = patterns('mysite.views',(r'^hello/$', 'hello'),(r'^time/$', 'current_datetime'),(r'^time/plus/(\d{1,2})/$', 'hours_ahead'),)urlpatterns += patterns('weblog.views',(r'^tag/(\w+)/$', 'tag'),)
2、URL正则匹配
如果请求的方法含有参数
def home(request, year='', month='01'):
则访问的URL可以写成:
url(r'^(\d{4})/(\d{2})$', 'hello.views.home')
这个可以用在:举个例子来说,一般的博客都喜欢以这样的url命名自己的博文:/year/month/day/xxx.html。如果我们按照我们前面所说的做,
需要为每个日志设计url映射,这显然是不科学的,如果我们可以在确定展示什么内容之前确定用户请求里的year,month等信息的话,问题便迎刃而解了。
3、URL使用命名组:
还是上面那个请求方法,URL可以写成:
url(r'^(?P
\d{4})/(?P
\d{2})$', 'hello.views.home')
或者
url(r'^(?P
\d{2})/(?P
\d{4})$', 'hello.views.home')
相对于第二点来说,优点很明显,不会混乱参数赋值顺序。
4、URL参数传递:
还可以写成:
url(r'^/$', 'hello.views.home',{'year':2013,'month':09})
这个又有什么用呢?来看:
以这段代码作为例子:
# urls.pyfrom django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('',(r'^events/$', views.event_list),(r'^blog/entries/$', views.entry_list),)
# views.pyfrom django.shortcuts import render_to_responsefrom mysite.models import Event, BlogEntrydef event_list(request):obj_list = Event.objects.all()return render_to_response('mysite/event_list.html', {'event_list': obj_list})def entry_list(request):obj_list = BlogEntry.objects.all()return render_to_response('mysite/blogentry_list.html', {'entry_list': obj_list})
这两个视图做的事情实质上是一样的: 显示一系列的对象。 让我们把它们显示的对象的类型抽象出来:
# urls.pyfrom django.conf.urls.defaults import *from mysite import models, viewsurlpatterns = patterns('',(r'^events/$', views.object_list, {'model': models.Event}),(r'^blog/entries/$', views.object_list, {'model': models.BlogEntry}),)
# views.pyfrom django.shortcuts import render_to_responsedef object_list(request, model):obj_list = model.objects.all()template_name = 'mysite/%s_list.html' % model.__name__.lower()return render_to_response(template_name, {'object_list': obj_list})
就这样小小的改动,我们突然发现我们有了一个可复用的,模型无关的视图! 从现在开始,当我们需要一个视

图来显示一系列的对象时,我们可以简简单单的重用这一个 object_list视图,而无须另外写视图代码了。

     我的博客其他文章列表  

转载于:https://my.oschina.net/helu/blog/165113

你可能感兴趣的文章
今天访问量过3000了,自己留个脚印
查看>>
FFmpeg笔记 -- AVPacket、AVFrame
查看>>
工作区配置 4
查看>>
Android开发工程师,前行路上的14项技能
查看>>
w 查看系统负载 uptime vmsta 详解 top 详解 sar 命令 free 命令
查看>>
ps 查看进 netstat 查看端口
查看>>
网页图表Highcharts实践教程之认识Highcharts
查看>>
LPC2103学习之GPIO
查看>>
管理岗是什么鬼?
查看>>
创建一个当前时间凌晨
查看>>
Python 学习笔记 - 多进程和进程池
查看>>
日志切割实例
查看>>
CentOS安装中文汉字输入法ibus
查看>>
【环境配置】DOSBox运行TT打字软件
查看>>
Android中处理Touch Icon的方案
查看>>
RHEL7.1配置本地yum源
查看>>
Mybatis Generator最完整配置详解
查看>>
Hash学习
查看>>
PHP按符号截取字符串的指定部分
查看>>
在Blender导出格式为STL
查看>>