django代码重用整理--摘自django book
来源:互联网 发布:黑马程序员php视频 编辑:程序博客网 时间:2024/06/06 13:03
forloop.counter 总是一个表示当前循环的执行次数的整数计数器。 这个计数器是从1开始的,所以在第一次循环时 forloop.counter 将会被设置为1。
{% for item in todo_list %} <p>{{ forloop.counter }}: {{ item }}</p>{% endfor %}
forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)。 例子在此:
1
{% for country in countries %} <table> {% for city in country.city_list %} <tr> <td>Country #{{ forloop.parentloop.counter }}</td> <td>City #{{ forloop.counter }}</td> <td>{{ city }}</td> </tr> {% endfor %} </table>{% endfor %}我们介绍了 render_to_response() 这个快捷方式,它可以简化调用 loader.get_template() ,然后创建一个 Context 对象,最后再调用模板对象的 render()过程
No1第一种
def my_view1(request): if not request.user.is_authenticated(): return HttpResponseRedirect('/accounts/login/') # ... return render_to_response('template1.html')def my_view2(request): if not request.user.is_authenticated(): return HttpResponseRedirect('/accounts/login/') # ... return render_to_response('template2.html')def my_view3(request): if not request.user.is_authenticated(): return HttpResponseRedirect('/accounts/login/') # ... return render_to_response('template3.html')
重复代码为登录验证
修改为
def requires_login(view): def new_view(request, *args, **kwargs): if not request.user.is_authenticated(): return HttpResponseRedirect('/accounts/login/') return view(request, *args, **kwargs) return new_view
函数requires_login,传入一个视图函数view,然后返回一个新的视图函数new_view.这个新的视图函数new_view在函数requires_login内定义 处理request.user.is_authenticated()这个验证,从而决定是否执行原来的view函数
from django.conf.urls.defaults import *from mysite.views import requires_login, my_view1, my_view2, my_view3urlpatterns = patterns('', (r'^view1/$', requires_login(my_view1)), (r'^view2/$', requires_login(my_view2)), (r'^view3/$', requires_login(my_view3)),)
No2 第二种
比如说,你有两个视图,它们的内容是一致的,除了它们所用的模板不太一样:
# urls.pyfrom django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('', (r'^foo/$', views.foo_view), (r'^bar/$', views.bar_view),)# views.pyfrom django.shortcuts import render_to_responsefrom mysite.models import MyModeldef 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})
可以修改为
# urls.pyfrom django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('', (r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}), (r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),)# views.pyfrom django.shortcuts import render_to_responsefrom mysite.models import MyModeldef foobar_view(request, template_name): m_list = MyModel.objects.filter(is_new=True) return render_to_response(template_name, {'m_list': m_list})
第三种
比如这个视图显示一系列的 Event 对象,那个视图显示一系列的 BlogEntry 对象,并意识到它们都是一个用来显示一系列对象的视图的特例,而对象的类型其实就是一个变量。
# 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})
我们使用 model.__name__.lower() 来决定模板的名字。 每个Python的类都有一个 __name__ 属性返回类名。 这特性在当我们直到运行时刻才知道对象类型的这种情况下很有用。 比如, BlogEntry 类的 __name__就是字符串 'BlogEntry' 。
这个例子与前面的例子稍有不同,我们传递了一个通用的变量名给模板。 当然我们可以轻易的把这个变量名改成 blogentry_list 或者 event_list
0 0
- django代码重用整理--摘自django book
- Django book 中文
- The Django Book 网址
- django book 制作
- The Django Book
- django book学习笔记
- The Django Book
- 中文翻译The Django Book
- The Django Book(一)
- The Django Book 第一章【Django介绍】
- Django中文文档-The Django Book
- Django book 2.0 的中文翻译。
- The Django Book 2.0--中文版
- django可重用app目录
- The Django Book 第2章【Django快速上手 】
- The Django Book【第4章 Django模板系统】
- The Django Book【第6章 Django管理系统admin 】
- Django学习笔记1(Django Book 前3章)
- Java获取本机IP地址
- 如何将远程计算机中的文件复制到本地计算机
- 刚子的博客之旅
- <<Oracle数据库性能优化艺术(第五期)>> 第11周 sql_trace及10046
- 完美hash
- django代码重用整理--摘自django book
- 账户注册(未完成)
- NYOJ270 数的分解
- 寻找副本-Qsort
- 设计模式学习总结
- win7 + maven + nexus + Eclipse
- linux 管道产生子shell
- 用Nib(Xib)来实现自定义Cell
- hdu-大数的阶乘