Antti Koskimaa
2011-03-08 16:55:26 UTC
I quickstarted a new tg 2.1 project by typing paster quickstart
testapp. In the genshi templates there's this kind of problem: if I
have a <div /> tag (that there is by default, a couple of <div
class="clearingdiv" /> tag), genshi doesn't render them correctly. It
produces a <div class="clearingdiv" /> element instead of <div
class="clearingdiv"></div> this is not allowed in xhtml nor html so
the browser thinks that the div element is not closed. You can verify
this by adding a "display: none" rule to .clearingdiv; everything
after the clearingdiv is hidden. Also, if you put a separate closing </
div> in the same line, it's still rendered as <div
class="clearingdiv" /> but if you put it on the next line, it's
rendered correctly as <div class="clearingdiv"></div> Below is the
index.html file (unmodified after the quickstart) that's breaking:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://genshi.edgewall.org/"
xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="master.html" />
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type"
py:replace="''"/>
<title>Welcome to TurboGears 2.1, standing on the
shoulders of giants, since 2007</title>
</head>
<body>
${sidebar_top()}
<div id="getting_started">
<h2>Presentation</h2>
<p>TurboGears 2 is rapid web application development toolkit
designed to make your life easier.</p>
<ol id="getting_started_steps">
<li class="getting_started">
<h3>Code your data model</h3>
<p> Design your data model, Create the database, and Add some
bootstrap data.</p>
</li>
<li class="getting_started">
<h3>Design your URL architecture</h3>
<p> Decide your URLs, Program your controller methods, Design
your
templates, and place some static files (CSS and/or
JavaScript). </p>
</li>
<li class="getting_started">
<h3>Distribute your app</h3>
<p> Test your source, Generate project documents, Build a
distribution.</p>
</li>
</ol>
</div>
<div class="clearingdiv" />
<div class="notice"> Thank you for choosing TurboGears.
</div>
</body>
</html>
My development.ini file (also unmodified. I just added a
templating.genshi.mode line that *should* help with the problem but is
not helping).
#
# testapp - Pylons development environment configuration
#
# The %(here)s variable will be replaced with the parent directory of
this file
#
# This file is for deployment specific config options -- other
configuration
# that is always required for the app is done in the config directory,
# and generally should not be modified by end users.
[DEFAULT]
debug = true
# Uncomment and replace with the address which should receive any
error reports
#email_to = ***@yourdomain.com
smtp_server = localhost
error_email_from = ***@localhost
templating.genshi.mode = html
[server:main]
use = egg:Paste#http
host = 127.0.0.1
port = 8080
[sa_auth]
cookie_secret = 2e54f72f-1db1-4918-b967-ad3f31bc3351
[app:main]
use = egg:testapp
full_stack = true
#lang = ru
cache_dir = %(here)s/data
beaker.session.key = testapp
beaker.session.secret = 2e54f72f-1db1-4918-b967-ad3f31bc3351
# If you'd like to fine-tune the individual locations of the cache
data dirs
# for the Cache data, or the Session saves, un-comment the desired
settings
# here:
#beaker.cache.data_dir = %(here)s/data/cache
#beaker.session.data_dir = %(here)s/data/sessions
# pick the form for your database
# %(here) may include a ':' character on Windows environments; this
can
# invalidate the URI when specifying a SQLite db via path name
# sqlalchemy.url=postgres://username:***@hostname:port/
databasename
# sqlalchemy.url=mysql://username:***@hostname:port/databasename
# If you have sqlite, here's a simple default to get you started
# in development
sqlalchemy.url = sqlite:///%(here)s/devdata.db
#echo shouldn't be used together with the logging module.
sqlalchemy.echo = false
sqlalchemy.echo_pool = false
sqlalchemy.pool_recycle = 3600
# if you are using Mako and want to be able to reload
# the mako template from disk during the development phase
# you should say 'true' here
# This option is only used for mako templating engine
# WARNING: if you want to deploy your application using a zipped egg
# (ie: if your application's setup.py defines zip-safe=True, then you
# MUST put "false" for the production environment because there will
# be no disk and real files to compare time with.
# On the contrary if your application defines zip-safe=False and is
# deployed in an unzipped manner, then you can leave this option to
true
templating.mako.reloadfromdisk = true
# the compiled template dir is a directory that must be readable by
your
# webserver. It will be used to store the resulting templates once
compiled
# by the TemplateLookup system.
# During development you generally don't need this option since
paste's HTTP
# server will have access to you development directories, but in
production
# you'll most certainly want to have apache or nginx to write in a
directory
# that does not contain any source code in any form for obvious
security reasons.
templating.mako.compiled_templates_dir = %(here)s/data/templates
# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION
ENVIRONMENT*
# Debug mode will enable the interactive debugging tool, allowing
ANYONE to
# execute malicious code after an exception is raised.
#set debug = false
# Logging configuration
# Add additional loggers, handlers, formatters here
# Uses python's logging config file format
# http://docs.python.org/lib/logging-config-fileformat.html
#turn this setting to "min" if you would like tw to produce minified
#javascript files (if your library supports that)
toscawidgets.framework.resource_variant=debug
[loggers]
keys = root, testapp, sqlalchemy, auth
[handlers]
keys = console
[formatters]
keys = generic
# If you create additional loggers, add them as a key to [loggers]
[logger_root]
level = INFO
handlers = console
[logger_testapp]
level = DEBUG
handlers =
qualname = testapp
[logger_sqlalchemy]
level = INFO
handlers =
qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither. (Recommended for production systems.)
# A logger for authentication, identification and authorization --
this is
# repoze.who and repoze.what:
[logger_auth]
level = WARN
handlers =
qualname = auth
# If you create additional handlers, add them as a key to [handlers]
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
# If you create additional formatters, add them as a key to
[formatters]
[formatter_generic]
format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %
(message)s
datefmt = %H:%M:%S
and listing of my site-packages directory:
Babel-0.9.4-py2.6.egg repoze.tm2-1.0b1-
py2.6.egg setuptools.pth
TurboGears2-2.1-py2.6.egg
Beaker-1.3-py2.6.egg repoze.what-1.0.9-
py2.6.egg sprox-0.6.10-py2.6.egg tw.forms-0.9.9-
py2.6.egg
distribute-0.6.10-py2.6.egg repoze.what.plugins.sql-1.0-
py2.6.egg SQLAlchemy-0.5.1-py2.6.egg WebError-0.10.1-py2.6.egg
easy-install.pth repoze.what_pylons-1.0-
py2.6.egg Tempita-0.2-py2.6.egg WebFlash-0.1a9-
py2.6.egg
FormEncode-1.2.1-py2.6.egg repoze.what_quickstart-1.0.8-
py2.6.egg testapp.egg-link WebHelpers-0.6.4-py2.6.egg
FormEncode-1.2.3dev-py2.6.egg repoze.who-1.0.18-
py2.6.egg tg.devtools-2.1-py2.6.egg WebOb-1.0.3-
py2.6.egg
Genshi-0.6-py2.6.egg repoze.who_friendlyform-1.0.8-
py2.6.egg tgext.admin-0.3.10-py2.6.egg WebTest-1.1-py2.6.egg
nose-0.10.4-py2.6.egg repoze.who.plugins.sa-1.0rc1-
py2.6.egg tgext.crud-0.3.9-py2.6.egg zope.sqlalchemy-0.6.1-
py2.6.egg
pip-0.7.2-py2.6.egg repoze.who_testutil-1.0rc1-
py2.6.egg ToscaWidgets-0.9.7.1-py2.6.egg
Pylons-0.9.7-py2.6.egg Routes-1.10.3-
py2.6.egg transaction-1.0a1-py2.6.egg
testapp. In the genshi templates there's this kind of problem: if I
have a <div /> tag (that there is by default, a couple of <div
class="clearingdiv" /> tag), genshi doesn't render them correctly. It
produces a <div class="clearingdiv" /> element instead of <div
class="clearingdiv"></div> this is not allowed in xhtml nor html so
the browser thinks that the div element is not closed. You can verify
this by adding a "display: none" rule to .clearingdiv; everything
after the clearingdiv is hidden. Also, if you put a separate closing </
div> in the same line, it's still rendered as <div
class="clearingdiv" /> but if you put it on the next line, it's
rendered correctly as <div class="clearingdiv"></div> Below is the
index.html file (unmodified after the quickstart) that's breaking:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://genshi.edgewall.org/"
xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="master.html" />
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type"
py:replace="''"/>
<title>Welcome to TurboGears 2.1, standing on the
shoulders of giants, since 2007</title>
</head>
<body>
${sidebar_top()}
<div id="getting_started">
<h2>Presentation</h2>
<p>TurboGears 2 is rapid web application development toolkit
designed to make your life easier.</p>
<ol id="getting_started_steps">
<li class="getting_started">
<h3>Code your data model</h3>
<p> Design your data model, Create the database, and Add some
bootstrap data.</p>
</li>
<li class="getting_started">
<h3>Design your URL architecture</h3>
<p> Decide your URLs, Program your controller methods, Design
your
templates, and place some static files (CSS and/or
JavaScript). </p>
</li>
<li class="getting_started">
<h3>Distribute your app</h3>
<p> Test your source, Generate project documents, Build a
distribution.</p>
</li>
</ol>
</div>
<div class="clearingdiv" />
<div class="notice"> Thank you for choosing TurboGears.
</div>
</body>
</html>
My development.ini file (also unmodified. I just added a
templating.genshi.mode line that *should* help with the problem but is
not helping).
#
# testapp - Pylons development environment configuration
#
# The %(here)s variable will be replaced with the parent directory of
this file
#
# This file is for deployment specific config options -- other
configuration
# that is always required for the app is done in the config directory,
# and generally should not be modified by end users.
[DEFAULT]
debug = true
# Uncomment and replace with the address which should receive any
error reports
#email_to = ***@yourdomain.com
smtp_server = localhost
error_email_from = ***@localhost
templating.genshi.mode = html
[server:main]
use = egg:Paste#http
host = 127.0.0.1
port = 8080
[sa_auth]
cookie_secret = 2e54f72f-1db1-4918-b967-ad3f31bc3351
[app:main]
use = egg:testapp
full_stack = true
#lang = ru
cache_dir = %(here)s/data
beaker.session.key = testapp
beaker.session.secret = 2e54f72f-1db1-4918-b967-ad3f31bc3351
# If you'd like to fine-tune the individual locations of the cache
data dirs
# for the Cache data, or the Session saves, un-comment the desired
settings
# here:
#beaker.cache.data_dir = %(here)s/data/cache
#beaker.session.data_dir = %(here)s/data/sessions
# pick the form for your database
# %(here) may include a ':' character on Windows environments; this
can
# invalidate the URI when specifying a SQLite db via path name
# sqlalchemy.url=postgres://username:***@hostname:port/
databasename
# sqlalchemy.url=mysql://username:***@hostname:port/databasename
# If you have sqlite, here's a simple default to get you started
# in development
sqlalchemy.url = sqlite:///%(here)s/devdata.db
#echo shouldn't be used together with the logging module.
sqlalchemy.echo = false
sqlalchemy.echo_pool = false
sqlalchemy.pool_recycle = 3600
# if you are using Mako and want to be able to reload
# the mako template from disk during the development phase
# you should say 'true' here
# This option is only used for mako templating engine
# WARNING: if you want to deploy your application using a zipped egg
# (ie: if your application's setup.py defines zip-safe=True, then you
# MUST put "false" for the production environment because there will
# be no disk and real files to compare time with.
# On the contrary if your application defines zip-safe=False and is
# deployed in an unzipped manner, then you can leave this option to
true
templating.mako.reloadfromdisk = true
# the compiled template dir is a directory that must be readable by
your
# webserver. It will be used to store the resulting templates once
compiled
# by the TemplateLookup system.
# During development you generally don't need this option since
paste's HTTP
# server will have access to you development directories, but in
production
# you'll most certainly want to have apache or nginx to write in a
directory
# that does not contain any source code in any form for obvious
security reasons.
templating.mako.compiled_templates_dir = %(here)s/data/templates
# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION
ENVIRONMENT*
# Debug mode will enable the interactive debugging tool, allowing
ANYONE to
# execute malicious code after an exception is raised.
#set debug = false
# Logging configuration
# Add additional loggers, handlers, formatters here
# Uses python's logging config file format
# http://docs.python.org/lib/logging-config-fileformat.html
#turn this setting to "min" if you would like tw to produce minified
#javascript files (if your library supports that)
toscawidgets.framework.resource_variant=debug
[loggers]
keys = root, testapp, sqlalchemy, auth
[handlers]
keys = console
[formatters]
keys = generic
# If you create additional loggers, add them as a key to [loggers]
[logger_root]
level = INFO
handlers = console
[logger_testapp]
level = DEBUG
handlers =
qualname = testapp
[logger_sqlalchemy]
level = INFO
handlers =
qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither. (Recommended for production systems.)
# A logger for authentication, identification and authorization --
this is
# repoze.who and repoze.what:
[logger_auth]
level = WARN
handlers =
qualname = auth
# If you create additional handlers, add them as a key to [handlers]
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
# If you create additional formatters, add them as a key to
[formatters]
[formatter_generic]
format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %
(message)s
datefmt = %H:%M:%S
and listing of my site-packages directory:
Babel-0.9.4-py2.6.egg repoze.tm2-1.0b1-
py2.6.egg setuptools.pth
TurboGears2-2.1-py2.6.egg
Beaker-1.3-py2.6.egg repoze.what-1.0.9-
py2.6.egg sprox-0.6.10-py2.6.egg tw.forms-0.9.9-
py2.6.egg
distribute-0.6.10-py2.6.egg repoze.what.plugins.sql-1.0-
py2.6.egg SQLAlchemy-0.5.1-py2.6.egg WebError-0.10.1-py2.6.egg
easy-install.pth repoze.what_pylons-1.0-
py2.6.egg Tempita-0.2-py2.6.egg WebFlash-0.1a9-
py2.6.egg
FormEncode-1.2.1-py2.6.egg repoze.what_quickstart-1.0.8-
py2.6.egg testapp.egg-link WebHelpers-0.6.4-py2.6.egg
FormEncode-1.2.3dev-py2.6.egg repoze.who-1.0.18-
py2.6.egg tg.devtools-2.1-py2.6.egg WebOb-1.0.3-
py2.6.egg
Genshi-0.6-py2.6.egg repoze.who_friendlyform-1.0.8-
py2.6.egg tgext.admin-0.3.10-py2.6.egg WebTest-1.1-py2.6.egg
nose-0.10.4-py2.6.egg repoze.who.plugins.sa-1.0rc1-
py2.6.egg tgext.crud-0.3.9-py2.6.egg zope.sqlalchemy-0.6.1-
py2.6.egg
pip-0.7.2-py2.6.egg repoze.who_testutil-1.0rc1-
py2.6.egg ToscaWidgets-0.9.7.1-py2.6.egg
Pylons-0.9.7-py2.6.egg Routes-1.10.3-
py2.6.egg transaction-1.0a1-py2.6.egg
--
You received this message because you are subscribed to the Google Groups "TurboGears Trunk" group.
To post to this group, send email to turbogears-***@googlegroups.com.
To unsubscribe from this group, send email to turbogears-trunk+***@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/turbogears-trunk?hl=en.
You received this message because you are subscribed to the Google Groups "TurboGears Trunk" group.
To post to this group, send email to turbogears-***@googlegroups.com.
To unsubscribe from this group, send email to turbogears-trunk+***@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/turbogears-trunk?hl=en.