django代码重用整理--摘自django book
程序员文章站
2022-11-27 13:30:16
forloop.counter 总是一个表示当前循环的执行次数的整数计数器。
这个计数器是从1开始的,所以在第一次循环时 forloop.counter 将会被设置为1。...
forloop.counter 总是一个表示当前循环的执行次数的整数计数器。 这个计数器是从1开始的,所以在第一次循环时 forloop.counter 将会被设置为1。
{% for item in todo_list %}{{ forloop.counter }}: {{ item }}
{% endfor %}
forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)。 例子在此:
1
{% for country in countries %} {% for city in country.city_list %} country #{{ forloop.parentloop.counter }} city #{{ forloop.counter }} {{ city }} {% endfor %} {% 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_view3 urlpatterns = patterns('', (r'^view1/$', requires_login(my_view1)), (r'^view2/$', requires_login(my_view2)), (r'^view3/$', requires_login(my_view3)), )
no2 第二种