django实战1-使用视图和模板显示多行
测试显示多行
一、初步测试
1、视图
# vim mysite/views.py
def more_lines(request):
x=range(1,100)
return render_to_response('more_lines.html',locals())
2、模板
# vim mysite/templates/more_lines.html
{% extends "base.html" %}
{% block title %}Test 100 lines{% endblock %}
{% block content %}
<table border="1">
<tr>
<td>line</td>
</tr>
<tr>
<td>99999</td>
</tr>
</table>
<table border="1">
<tr>
<td>line</td>
</tr>
{% for item in x %}
<tr>
<td>{{ item }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
3、URL
# vim mysite/urls.py
from django.conf.urls import patterns, include, url
from mysite.views import hello,current_datetime,hours_ahead,more_lines
urlpatterns = patterns('',
url(r'^lines/$',more_lines),
}
4、显示
http://192.168.1.250:8000/lines/
100行都全部显示了,控制一次显示10行
5、总结
控制显示多少行,不应该在模板里控制,而是应该在视图里控制
二、改进
如果想自己控制显示的行呢?
如果想显示5-10,或者5-12行呢
分析
如果想自己控制显示的行,传入一个参数即可。
如果要显示5-10,并且明确每页显示都是5行(可以用列表的步进),导入一个开始显示行的参数即可
如果每页显示行数和从哪行显示都不确定,需要传入两个参数,一个开始,一个步进。
假设一共有100行数据
1、控制显示到多少行
1)视图
# vim mysite/views.py
def more_lines(request,sclice):
x=range(1,100)
try:
sclice=int(sclice)
except ValueError:
raise Http404()
else:
x=x[:sclice]
return render_to_response('more_lines.html',locals())
2)、URL
from django.conf.urls import patterns, include, url
from mysite.views import hello,current_datetime,hours_ahead,more_lines
urlpatterns = patterns('',
url(r'^lines/(\d{1,2})/$',more_lines),#只有100行,最多让显示99行了
}
3)访问测试
http://192.168.1.250:8000/lines/18/
2、每页显示10行,传入开始显示的行
# vim mysite/views.py
def more_lines(request,start):
x=range(1,100)
try:
start=int(start)
except ValueError:
raise Http404()
else:
x=x[start:start+10]
return render_to_response('more_lines.html',locals())
访问测试
http://192.168.1.250:8000/lines/19/
3、如果每页显示行数和从哪行显示都不确定,需要传入两个参数,一个开始,一个步进。这里还是用位置参数,应该可以用关键词参数,目前还不会
# vim mysite/views.py
def more_lines(request,start,step):
x=range(1,100)
try:
start=int(start)
step=int(step)
except ValueError:
raise Http404()
else:
x=x[start:start+step]
return render_to_response('more_lines.html',locals())
URL
url(r'^lines/(\d{1,2})/(\d)/$',more_lines),
控制步进在10内
http://192.168.1.250:8000/lines/80/9/