Let's take a closer look at the DTML code which generated the screen on the previous page.
<dtml-var standard_html_header>
<h2><dtml-var title_or_id></h2>
<p>
This
is the <dtml-var id> Document.
</p>
<dtml-var standard_html_footer>
As you can see, this code block contains both HTML and DTML. When Zope processes this DTML Document instance, the DTML tags within it will be processed, and will be replaced with the resulting output. If you're familiar with PHP, JSP or ASP, this tag-based approach should already be familiar to you.
The first line of code
<dtml-var standard_html_header>
merely inserts the value of the DTML variable named "standard_html_header". This is one of the few predefined variables available in Zope, and, as the name suggests, it is used to display a common header for your site.
Next, the lines
<h2><dtml-var title_or_id></h2>
<p>This is the <dtml-var id> Document.</p>
fetch and display either the document's title or its ID. If no title is available (as is the case here, since I never specified one when I created the object), Zope will make do with the ID.
Finally, the line
<dtml-var standard_html_footer>
inserts the value of another predefined Zope variable, "standard_html_footer". No prizes for guessing what this one's used for!
Obviously, you can just as easily omit all the DTML code and use a static HTML document - like this one:
<html>
<head><basefont face="Arial"></head><body><h2>Can you say dee tee em el?</h2></body></html>
Zope will look for DTML tags within it and, finding none, will simply render the HTML as is.