欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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 第二种