(* Use a template to display the parameters passed to the script. In
particular, it illustrates how to use the template "table"
directive and the escaping of template arguments. *)
open Netcgi
module T = Netcgi_modtpl
let template = T.template_from_string "\
<html>
<head><title>::title_html::</title></head>
<body bgcolor=\"#ffffff\">
<h1>::title_html::</h1>
<h2>Parameters passed into the script</h2>
<table border=\"1\"><tr><th>Name</th><th>Value</th></tr>
::table(params)::
<tr><td>::name_html::</td><td>::value_html::</td></tr>
::end::
</table>
<h2>Form</h2>
<p>
This is a simple form which POSTs data to the script:
</p>
<form method=\"post\" action=\"::self::\">
Name: <input name=\"name\" value=\"\">
<input type=\"submit\" name=\"submit\" value=\"Send\">
</form>
</body>
</html>"
let display_params (cgi:cgi) =
let table = List.map (fun a ->
[ "name", T.VarString a#name;
"value", T.VarString a#value ]
) cgi#arguments in
template#set "title" "Params demonstration CGI script";
template#table "params" table;
(* Note the unescaped "self" parameter that allows to locate and
name the script the way you like. *)
template#set "self" (cgi#url());
template#output cgi
let () =
let buffered _ ch = new Netchannels.buffered_trans_channel ch in
(* To use a different connector, just change the next line -- the rest of
the code stays the same. *)
Netcgi_cgi.run ~output_type:(`Transactional buffered) display_params