Django中传递参数到URLconf的视图函数中的方法


Posted in Python onJuly 18, 2015

有时你会发现你写的视图函数是十分类似的,只有一点点的不同。 比如说,你有两个视图,它们的内容是一致的,除了它们所用的模板不太一样:

# urls.py

from django.conf.urls.defaults import *
from mysite import views

urlpatterns = patterns('',
  (r'^foo/$', views.foo_view),
  (r'^bar/$', views.bar_view),
)

# views.py

from django.shortcuts import render_to_response
from mysite.models import MyModel

def foo_view(request):
  m_list = MyModel.objects.filter(is_new=True)
  return render_to_response('template1.html', {'m_list': m_list})

def bar_view(request):
  m_list = MyModel.objects.filter(is_new=True)
  return render_to_response('template2.html', {'m_list': m_list})

我们在这代码里面做了重复的工作,不够简练。 起初你可能会想,通过对两个URL都使用同样的视图,在URL中使用括号捕捉请求,然后在视图中检查并决定使用哪个模板来去除代码的冗余,就像这样:

# urls.py

from django.conf.urls.defaults import *
from mysite import views

urlpatterns = patterns('',
  (r'^(foo)/$', views.foobar_view),
  (r'^(bar)/$', views.foobar_view),
)

# views.py

from django.shortcuts import render_to_response
from mysite.models import MyModel

def foobar_view(request, url):
  m_list = MyModel.objects.filter(is_new=True)
  if url == 'foo':
    template_name = 'template1.html'
  elif url == 'bar':
    template_name = 'template2.html'
  return render_to_response(template_name, {'m_list': m_list})

这种解决方案的问题还是老缺点,就是把你的URL耦合进你的代码里面了。 如果你打算把 /foo/ 改成 /fooey/ 的话,那么你就得记住要去改变视图里面的代码。

对一个可选URL配置参数的优雅解决方法: URLconf里面的每一个模式都可以包含第三个数据: 一个关键字参数的字典:

有了这个概念以后,我们就可以把我们现在的例子改写成这样:

# urls.py

from django.conf.urls.defaults import *
from mysite import views

urlpatterns = patterns('',
  (r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),
  (r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),
)

# views.py

from django.shortcuts import render_to_response
from mysite.models import MyModel

def foobar_view(request, template_name):
  m_list = MyModel.objects.filter(is_new=True)
  return render_to_response(template_name, {'m_list': m_list})

如你所见,这个例子中,URLconf指定了 template_name 。 而视图函数会把它当成另一个参数。

这种使用额外的URLconf参数的技术以最小的代价给你提供了向视图函数传递额外信息的一个好方法。

Python 相关文章推荐
Python脚本实现代码行数统计代码分享
Mar 10 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
Python实现统计给定字符串中重复模式最高子串功能示例
May 16 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
对python中的乘法dot和对应分量相乘multiply详解
Nov 14 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
python FTP批量下载/删除/上传实例
Dec 22 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
python Shapely使用指南详解
Feb 18 Python
在Django的URLconf中使用命名组的方法
Jul 18 #Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 #Python
在Django的URLconf中进行函数导入的方法
Jul 18 #Python
在Django的form中使用CSS进行设计的方法
Jul 18 #Python
在Django的视图中使用form对象的方法
Jul 18 #Python
详解Django中的form库的使用
Jul 18 #Python
在Django框架中编写Contact表单的教程
Jul 17 #Python
You might like
php数据库密码的找回的步骤
2011/01/12 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
python 获取本机ip地址的两个方法
2013/02/25 Python
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
python分析作业提交情况
2017/11/22 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
对pandas中Series的map函数详解
2018/07/25 Python
python操作yaml说明
2020/04/08 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
金融专业应届生求职信
2013/11/02 职场文书
部队领导证婚词
2014/01/12 职场文书
大四学生思想汇报
2014/01/13 职场文书
酒吧创业计划书
2014/01/18 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
合作经营协议书
2014/04/17 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
消防演习通知
2015/04/25 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书