2013-05-06 73 views
0
{% with start=0 end=entries.number|add:"2" %} 
    {{ paginator.page_range|slice:"start:end" }} 
    {{ start }}, {{ end }} 
    {{ paginator.page_range|slice:"0:3" }} 
{% endwith %} 

爲什麼Django的1.5模板引擎產生下面的輸出上面的代碼:Django的模板片

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
0, 3 
[1, 2, 3] 

回答

1

有關使用此代碼,盧克什麼?

https://github.com/django/django/blob/master/django/template/defaultfilters.py

@register.filter("slice", is_safe=True) 
def slice_filter(value, arg): 
    """ 
    Returns a slice of the list. 

    Uses the same syntax as Python's list slicing; see 
    http://www.diveintopython3.net/native-datatypes.html#slicinglists 
    for an introduction. 
    """ 
    try: 
     bits = [] 
     for x in arg.split(':'): 
      if len(x) == 0: 
       bits.append(None) 
      else: 
       bits.append(int(x)) 
     return value[slice(*bits)] 

    except (ValueError, TypeError): 
     return value # Fail silently. 

爲了使長話短說:過濾器不能訪問上下文,所以它不能解析的變量,只有用litteral值工作。