473,698 Members | 2,467 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

PHP + TinyButStrong Python replacement

hi! i'm a php user and a python programmer. i'd love to use python for
my server side needs but i can't seem to find what i'm looking for. for
most of my php work i use mysql and tinyButStrong
(http://www.tinybutstrong.com) which is a very lightweight template
engine that offers powerful functionalities . you insert TBS tags in web
pages like:

<div align="center" class="title-page"[var.x] </div>

and it replaces [var.x] with the value of global variable x. it also
makes blocks (and nested blocks) easy to implement:

<p class="text-example2"[blk1;block=begi n] [blk1.val]<br>
[blk1;block=end] </p>

in the previous code it cycles throu all the values of the array blk1.

it does many more things, like htlm escaping, url and js encoding etc,
conditional displaying etc, but it is not more confusing that inserting
pieces of code into the HTML (aka: littering the code and kissing
goodbye to the code/presentation separation). it comes in the form of a
single file with a single class that you can easily include in the code
and go.

now, i've searched the net and it seems full of python-based frameworks
for doing server side scripting and templating, but none that suits my
needs.

1. i like writing code and i like control. i mean, open up the
simplest text editor and write in it. i don't want something that is
command-line driven or that writes code for me like ">>>
makePagesFromTh isDatabase()".
2. i want something very lightweight. i don't want dozen of options,
pre-made blogging parts ecc. i just need a good non invasive template
engine and the basic functions for server side scripting, like session
managing, request parsing, functions to manipulate html code (encodings etc)
3. i don't want to beg my hosting provider to install the libraries.
a simple include file should do the work.
4. object oriented programming is not required (better: i prefer
plain old procedural programming).

any help? thanks in advance
Jun 27 '08 #1
12 1406
On May 7, 6:12*am, pistacchio <pistacc...@gma il.comwrote:
hi! i'm a php user and a python programmer. i'd love to use python for
my server side needs but i can't seem to find what i'm looking for. for
most of my php work i use mysql and tinyButStrong
(http://www.tinybutstrong.com) which is a very lightweight template
engine that offers powerful functionalities . you insert TBS tags in web
pages like:

<div align="center" class="title-page"[var.x] </div>

and it replaces [var.x] with the value of global variable x. it also
makes blocks (and nested blocks) easy to implement:

<p class="text-example2"[blk1;block=begi n] [blk1.val]<br>
[blk1;block=end] </p>

in the previous code it cycles throu all the values of the array blk1.

it does many more things, like htlm escaping, url and js encoding etc,
conditional displaying etc, but it is not more confusing that inserting
pieces of code into the HTML (aka: littering the code and kissing
goodbye to the code/presentation separation). it comes in the form of a
single file with a single class that you can easily include in the code
and go.

now, i've searched the net and it seems full of python-based frameworks
for doing server side scripting and templating, but none that suits my
needs.

* * 1. i like writing code and i like control. i mean, open up the
simplest text editor and write in it. i don't want something that is
command-line driven or that writes code for me like ">>>
makePagesFromTh isDatabase()".
* * 2. i want something very lightweight. i don't want dozen of options,
pre-made blogging parts ecc. i just need a good non invasive template
engine and the basic functions for server side scripting, like session
managing, request parsing, functions to manipulate html code (encodings etc)
* * 3. i don't want to beg my hosting provider to install the libraries.
a simple include file should do the work.
* * 4. object oriented programming is not required (better: i prefer
plain old procedural programming).

any help? thanks in advance
Did you look at TurboGears or Django? TG uses Kid in the 1.x series
and Genshi in 2.x (I think) for templating purposes. There's also
Cheetah, one of the more powerful Python templating engines out there.

http://genshi.edgewall.org/
http://www.kid-templating.org/
http://www.cheetahtemplate.org/
http://turbogears.org/

Maybe those links will get you going.

Mike
Jun 27 '08 #2
Mike Driscoll ha scritto:
On May 7, 6:12 am, pistacchio <pistacc...@gma il.comwrote:
>hi! i'm a php user and a python programmer. i'd love to use python for
my server side needs but i can't seem to find what i'm looking for. for
most of my php work i use mysql and tinyButStrong
(http://www.tinybutstrong.com) which is a very lightweight template
engine that offers powerful functionalities . you insert TBS tags in web
pages like:

<div align="center" class="title-page"[var.x] </div>

and it replaces [var.x] with the value of global variable x. it also
makes blocks (and nested blocks) easy to implement:

<p class="text-example2"[blk1;block=begi n] [blk1.val]<br>
[blk1;block=end] </p>

in the previous code it cycles throu all the values of the array blk1.

it does many more things, like htlm escaping, url and js encoding etc,
conditional displaying etc, but it is not more confusing that inserting
pieces of code into the HTML (aka: littering the code and kissing
goodbye to the code/presentation separation). it comes in the form of a
single file with a single class that you can easily include in the code
and go.

now, i've searched the net and it seems full of python-based frameworks
for doing server side scripting and templating, but none that suits my
needs.

1. i like writing code and i like control. i mean, open up the
simplest text editor and write in it. i don't want something that is
command-line driven or that writes code for me like ">>>
makePagesFromT hisDatabase()".
2. i want something very lightweight. i don't want dozen of options,
pre-made blogging parts ecc. i just need a good non invasive template
engine and the basic functions for server side scripting, like session
managing, request parsing, functions to manipulate html code (encodings etc)
3. i don't want to beg my hosting provider to install the libraries.
a simple include file should do the work.
4. object oriented programming is not required (better: i prefer
plain old procedural programming).

any help? thanks in advance
hi, thanks for replaying
Did you look at TurboGears or Django? TG uses Kid in the 1.x series
and Genshi in 2.x (I think) for templating purposes. There's also
Cheetah, one of the more powerful Python templating engines out there.
django is exacly the kind of giant i'm trying to avoid
http://genshi.edgewall.org/
the first lines of the tutorial read:
"First, make sure you have CherryPy 3.0.x installed"
Now, cherrypy is something that is not properly "include a file and get
going!"
http://www.kid-templating.org/
kid seems to have a non-linear approach, but i may give it a try
http://www.cheetahtemplate.org/
cheetah was something that i already considered using. have i to
"install" it or can i just import it?
http://turbogears.org/
same problem as with django!
>
Maybe those links will get you going.

Mike
Jun 27 '08 #3
pistacchio wrote:
Mike Driscoll ha scritto:
>On May 7, 6:12 am, pistacchio <pistacc...@gma il.comwrote:
>>hi! i'm a php user and a python programmer. i'd love to use python for
my server side needs but i can't seem to find what i'm looking for. for
most of my php work i use mysql and tinyButStrong
(http://www.tinybutstrong.com) which is a very lightweight template
engine that offers powerful functionalities . you insert TBS tags in web
pages like:

<div align="center" class="title-page"[var.x] </div>

and it replaces [var.x] with the value of global variable x. it also
makes blocks (and nested blocks) easy to implement:

<p class="text-example2"[blk1;block=begi n] [blk1.val]<br>
[blk1;block=end] </p>

in the previous code it cycles throu all the values of the array blk1.

it does many more things, like htlm escaping, url and js encoding etc,
conditional displaying etc, but it is not more confusing that inserting
pieces of code into the HTML (aka: littering the code and kissing
goodbye to the code/presentation separation). it comes in the form of a
single file with a single class that you can easily include in the code
and go.

now, i've searched the net and it seems full of python-based frameworks
for doing server side scripting and templating, but none that suits my
needs.

1. i like writing code and i like control. i mean, open up the
simplest text editor and write in it. i don't want something that is
command-line driven or that writes code for me like ">>>
makePagesFrom ThisDatabase()" .
2. i want something very lightweight. i don't want dozen of options,
pre-made blogging parts ecc. i just need a good non invasive template
engine and the basic functions for server side scripting, like session
managing, request parsing, functions to manipulate html code (encodings
etc)
3. i don't want to beg my hosting provider to install the libraries.
a simple include file should do the work.
4. object oriented programming is not required (better: i prefer
plain old procedural programming).

any help? thanks in advance

hi, thanks for replaying
>Did you look at TurboGears or Django? TG uses Kid in the 1.x series
and Genshi in 2.x (I think) for templating purposes. There's also
Cheetah, one of the more powerful Python templating engines out there.

django is exacly the kind of giant i'm trying to avoid
>http://genshi.edgewall.org/

the first lines of the tutorial read:
"First, make sure you have CherryPy 3.0.x installed"
Now, cherrypy is something that is not properly "include a file and get
going!"
>http://www.kid-templating.org/

kid seems to have a non-linear approach, but i may give it a try
>http://www.cheetahtemplate.org/

cheetah was something that i already considered using. have i to
"install" it or can i just import it?
You will need to install any of these. It is part of how python is designed.
Extendability comes with a price-tag.

I don't know for sure, but I guess the cherrypy-requirement of genshi is
more for the tutorial, not for the templating itself.

Diez
Jun 27 '08 #4
Diez B. Roggisch ha scritto:
pistacchio wrote:
>Mike Driscoll ha scritto:
>>On May 7, 6:12 am, pistacchio <pistacc...@gma il.comwrote:
hi! i'm a php user and a python programmer. i'd love to use python for
my server side needs but i can't seem to find what i'm looking for. for
most of my php work i use mysql and tinyButStrong
(http://www.tinybutstrong.com) which is a very lightweight template
engine that offers powerful functionalities . you insert TBS tags in web
pages like:

<div align="center" class="title-page"[var.x] </div>

and it replaces [var.x] with the value of global variable x. it also
makes blocks (and nested blocks) easy to implement:

<p class="text-example2"[blk1;block=begi n] [blk1.val]<br>
[blk1;block=end] </p>

in the previous code it cycles throu all the values of the array blk1.

it does many more things, like htlm escaping, url and js encoding etc,
conditiona l displaying etc, but it is not more confusing that inserting
pieces of code into the HTML (aka: littering the code and kissing
goodbye to the code/presentation separation). it comes in the form of a
single file with a single class that you can easily include in the code
and go.

now, i've searched the net and it seems full of python-based frameworks
for doing server side scripting and templating, but none that suits my
needs.

1. i like writing code and i like control. i mean, open up the
simplest text editor and write in it. i don't want something that is
command-line driven or that writes code for me like ">>>
makePagesFro mThisDatabase() ".
2. i want something very lightweight. i don't want dozen of options,
pre-made blogging parts ecc. i just need a good non invasive template
engine and the basic functions for server side scripting, like session
managing, request parsing, functions to manipulate html code (encodings
etc)
3. i don't want to beg my hosting provider to install the libraries.
a simple include file should do the work.
4. object oriented programming is not required (better: i prefer
plain old procedural programming).

any help? thanks in advance
hi, thanks for replaying
>>Did you look at TurboGears or Django? TG uses Kid in the 1.x series
and Genshi in 2.x (I think) for templating purposes. There's also
Cheetah, one of the more powerful Python templating engines out there.
django is exacly the kind of giant i'm trying to avoid
>>http://genshi.edgewall.org/
the first lines of the tutorial read:
"First, make sure you have CherryPy 3.0.x installed"
Now, cherrypy is something that is not properly "include a file and get
going!"
>>http://www.kid-templating.org/
kid seems to have a non-linear approach, but i may give it a try
>>http://www.cheetahtemplate.org/
cheetah was something that i already considered using. have i to
"install" it or can i just import it?

You will need to install any of these. It is part of how python is designed.
Extendability comes with a price-tag.
well, the problema is exacly that i'm looking for a python module, not
for a python library.
most of the tasks i need are just:
1. on the shoulders of the existing standard cgi modules, automate an
render easier the handling of things such as sessions and requests
2. on the shoulders of the existing standard regex module, have a simple
but complete templating engine and html-related encoder
Jun 27 '08 #5
On May 7, 9:40*am, pistacchio <pistacc...@gma il.comwrote:
Diez B. Roggisch ha scritto:
pistacchio wrote:
Mike Driscoll ha scritto:
On May 7, 6:12 am, pistacchio <pistacc...@gma il.comwrote:
hi! i'm a php user and a python programmer. i'd love to use python for
my server side needs but i can't seem to find what i'm looking for. for
most of my php work i use mysql and tinyButStrong
(http://www.tinybutstrong.com) which is a very lightweight template
engine that offers powerful functionalities . you insert TBS tags in web
pages like:
>><div align="center" class="title-page"[var.x] </div>
>>and it replaces [var.x] with the value of global variable x. it also
makes blocks (and nested blocks) easy to implement:
>><p class="text-example2"[blk1;block=begi n] [blk1.val]<br>
[blk1;block=end] </p>
>>in the previous code it cycles throu all the values of the array blk1..
>>it does many more things, like htlm escaping, url and js encoding etc,
conditional displaying etc, but it is not more confusing that inserting
pieces of code into the HTML (aka: littering the code and kissing
goodbye to the code/presentation separation). it comes in the form ofa
single file with a single class that you can easily include in the code
and go.
>>now, i've searched the net and it seems full of python-based frameworks
for doing server side scripting and templating, but none that suits my
needs.
>>* * 1. i like writing code and i like control. i mean, open up the
simplest text editor and write in it. i don't want something that is
command-line driven or that writes code for me like ">>>
makePagesFrom ThisDatabase()" .
* * 2. i want something very lightweight. i don't want dozen of options,
pre-made blogging parts ecc. i just need a good non invasive template
engine and the basic functions for server side scripting, like session
managing, request parsing, functions to manipulate html code (encodings
etc)
* * 3. i don't want to beg my hosting provider to install the libraries.
a simple include file should do the work.
* * 4. object oriented programming is not required (better: i prefer
plain old procedural programming).
>>any help? thanks in advance
hi, thanks for replaying
>Did you look at TurboGears or Django? TG uses Kid in the 1.x series
and Genshi in 2.x (I think) for templating purposes. There's also
Cheetah, one of the more powerful Python templating engines out there.
django is exacly the kind of giant i'm trying to avoid
>>http://genshi.edgewall.org/
the first lines of the tutorial read:
"First, make sure you have CherryPy 3.0.x installed"
Now, cherrypy is something that is not properly "include a file and get
going!"
http://www.kid-templating.org/
kid seems to have a non-linear approach, but i may give it a try
>>http://www.cheetahtemplate.org/
cheetah was something that i already considered using. have i to
"install" it or can i just import it?
You will need to install any of these. It is part of how python is designed.
Extendability comes with a price-tag.

well, the problema is exacly that i'm looking for a python module, not
for a python library.
What does it matter if it's a single file or a dozen under a package ?
"Installati on" for pure Python packages can be as simple as copying
the package under any directory in your PYTHONPATH.

Check out Mako (http://www.makotemplates.org/), it's pretty powerful
and fast.

George
Jun 27 '08 #6
George Sakkis ha scritto:
On May 7, 9:40 am, pistacchio <pistacc...@gma il.comwrote:
>Diez B. Roggisch ha scritto:
>>pistacchio wrote:
Mike Driscoll ha scritto:
On May 7, 6:12 am, pistacchio <pistacc...@gma il.comwrote:
>hi! i'm a php user and a python programmer. i'd love to use python for
>my server side needs but i can't seem to find what i'm looking for. for
>most of my php work i use mysql and tinyButStrong
>(http://www.tinybutstrong.com) which is a very lightweight template
>engine that offers powerful functionalities . you insert TBS tags in web
>pages like:
><div align="center" class="title-page"[var.x] </div>
>and it replaces [var.x] with the value of global variable x. it also
>makes blocks (and nested blocks) easy to implement:
><p class="text-example2"[blk1;block=begi n] [blk1.val]<br>
>[blk1;block=end] </p>
>in the previous code it cycles throu all the values of the array blk1.
>it does many more things, like htlm escaping, url and js encoding etc,
>conditiona l displaying etc, but it is not more confusing that inserting
>pieces of code into the HTML (aka: littering the code and kissing
>goodbye to the code/presentation separation). it comes in the form of a
>single file with a single class that you can easily include in the code
>and go.
>now, i've searched the net and it seems full of python-based frameworks
>for doing server side scripting and templating, but none that suits my
>needs.
> 1. i like writing code and i like control. i mean, open up the
>simplest text editor and write in it. i don't want something that is
>command-line driven or that writes code for me like ">>>
>makePagesF romThisDatabase ()".
> 2. i want something very lightweight. i don't want dozen of options,
>pre-made blogging parts ecc. i just need a good non invasive template
>engine and the basic functions for server side scripting, like session
>managing , request parsing, functions to manipulate html code (encodings
>etc)
> 3. i don't want to beg my hosting provider to install the libraries.
>a simple include file should do the work.
> 4. object oriented programming is not required (better: i prefer
>plain old procedural programming).
>any help? thanks in advance
hi, thanks for replaying
Did you look at TurboGears or Django? TG uses Kid in the 1.x series
and Genshi in 2.x (I think) for templating purposes. There's also
Cheetah, one of the more powerful Python templating engines out there.
django is exacly the kind of giant i'm trying to avoid
http://genshi.edgewall.org/
the first lines of the tutorial read:
"First, make sure you have CherryPy 3.0.x installed"
Now, cherrypy is something that is not properly "include a file and get
going!"
http://www.kid-templating.org/
kid seems to have a non-linear approach, but i may give it a try
http://www.cheetahtemplate.org/
cheetah was something that i already considered using. have i to
"install" it or can i just import it?
You will need to install any of these. It is part of how python is designed.
Extendabili ty comes with a price-tag.
well, the problema is exacly that i'm looking for a python module, not
for a python library.

What does it matter if it's a single file or a dozen under a package ?
"Installati on" for pure Python packages can be as simple as copying
the package under any directory in your PYTHONPATH.
well, it doesn't matter if it's a single file or a package, but it
_does_ matter if you have to put them under the path where python is
installed because, in a typical shared web hosting environment (such the
one that i use) you don't have access to system directories.
Check out Mako (http://www.makotemplates.org/), it's pretty powerful
and fast.
woudl you suggest mako over cheetah?
>
George
Jun 27 '08 #7
Pistacchio,

Templite
http://aspn.activestate.com/ASPN/Coo.../Recipe/496702

A light-weight (~40 lines), fully functional, general purpose templating
engine, allowing you to embed python code directly into your text. This
engine is suitable for any templating (not only HTML/XML), and is
minimal (40 lines of code!) and fast (all preprocessing is done in
"compile time")

Quote: "Very nice. That's just the right amount of markup for embedding
Python into html documents."

Malcolm
Jun 27 '08 #8

"pistacchio " <pi********@gma il.comwrote in message
news:fv******** **@aioe.org...

| well, it doesn't matter if it's a single file or a package, but it
| _does_ matter if you have to put them under the path where python is
| installed because, in a typical shared web hosting environment (such the
| one that i use) you don't have access to system directories.

When you do an import, the *first* place the interpreter looks is the
*current* directory, which usually is the directory containing the main
file. That is because the first entry in sys.path is ''. So put
'template.py' in the same directory as my_web_code.py. If necessary, one
can add an entry to the beginning of sys.path.

No need to touch the site-packages directory. The only reason to put
something there is to make modules available to any code in any directory
without putting a copy in each directory containing python files.

tjr


Jun 27 '08 #9
On 7 mai, 16:17, pistacchio <pistacc...@gma il.comwrote:
George Sakkis ha scritto:
(snip)
What does it matter if it's a single file or a dozen under a package ?
"Installati on" for pure Python packages can be as simple as copying
the package under any directory in your PYTHONPATH.

well, it doesn't matter if it's a single file or a package, but it
_does_ matter if you have to put them under the path where python is
installed because, in a typical shared web hosting environment (such the
one that i use) you don't have access to system directories.
You *never* have to install anything in the default path - install
your python libs wherever you want, and just make sure this wherever
is in your python path (usually via the PYTHONPATH environment
variable).
Check out Mako (http://www.makotemplates.org/), it's pretty powerful
and fast.

woudl you suggest mako over cheetah?
As far as I'm concerned, I would. Now if you're looking for a
somewhat barebone MVC framework, you may want to have a look at
web.py.

Jun 27 '08 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

49
2844
by: Ville Vainio | last post by:
I don't know if you have seen this before, but here goes: http://text.userlinux.com/white_paper.html There is a jab at Python, though, mentioning that Ruby is more "refined". -- Ville Vainio http://www.students.tut.fi/~vainio24
14
2853
by: David MacQuigg | last post by:
I am starting a new thread so we can avoid some of the non-productive argument following my earlier post "What is good about Prothon". At Mr. Hahn's request, I will avoid using the name "Prothon" in the subject of any post to this newsgroup. Please ignore the old thread. I've also updated my webpage http://ece.arizona.edu/~edatools/Python Anyone with some good ideas for "Python 3" is welcome to contribute. I hope GvR won't sue me for...
5
2901
by: Vamsee Krishna Gomatam | last post by:
Hello, I'm having some problems understanding Regexps in Python. I want to replace "<google>PHRASE</google>" with "<a href=http://www.google.com/search?q=PHRASE>PHRASE</a>" in a block of text. How can I achieve this in Python? Sorry for the naive question but the documentation is really bad :-( Regards, GVK
3
9737
by: Vibha Tripathi | last post by:
Hi Folks, I put a Regular Expression question on this list a couple days ago. I would like to rephrase my question as below: In the Python re.sub(regex, replacement, subject) method/function, I need the second argument 'replacement' to be another regular expression ( not a string) . So when I find a 'certain kind of string' in
17
8092
by: DanielJohnson | last post by:
how to use the combination function in python ? For example 9 choose 2 (written as 9C2) = 9!/7!*2!=36 Please help, I couldnt find the function through help.
40
2843
by: walterbyrd | last post by:
I mean other than sysadmins, programmers, and web-site developers? I have heard of some DBAs who use a lot of python. I suppose some scientists. I think python is used in bioinformatics. I think some math and physics people use python. I suppose some people use python to learn "programming" in general. Python would do well as a teaching language.
0
8609
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
9166
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
7737
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
6525
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
4371
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
4621
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
3052
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
2333
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2007
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.