hyde-old
hyde-old copied to clipboard
Jinja2 is parsing CSS & chokes on valid syntax
This took a long time to figure out…
I was getting this error for some reason:
~/path > hyde gen -r
22:27:10 hyde.engine Reading site configuration from [/path/site.yaml]
22:27:10 hyde Regenerating the site...
22:27:10 hyde.engine Reading site contents
22:27:10 hyde.engine Generating site at [/path]
22:27:10 hyde.engine Configuring the template environment
22:27:10 hyde.engine Reading site contents
{'index_file_names': ['index.html'], 'append_slash': False, 'strip_extensions': ['html']}
22:27:10 hyde.engine Generating site to [/path/deploy]
Traceback (most recent call last):
File "/usr/local/bin/hyde", line 8, in <module>
load_entry_point('hyde==0.8', 'console_scripts', 'hyde')()
File "/Library/Python/2.6/site-packages/hyde-0.8-py2.6.egg/EGG-INFO/scripts/main.py", line 10, in main
Engine().run()
File "build/bdist.macosx-10.6-universal/egg/commando.py", line 198, in run
File "/Library/Python/2.6/site-packages/hyde-0.8-py2.6.egg/hyde/engine.py", line 90, in gen
gen.generate_all(incremental=incremental)
File "/Library/Python/2.6/site-packages/hyde-0.8-py2.6.egg/hyde/generator.py", line 198, in generate_all
self.__generate_node__(self.site.content, incremental)
File "/Library/Python/2.6/site-packages/hyde-0.8-py2.6.egg/hyde/generator.py", line 289, in __generate_node__
self.__generate_resource__(resource, incremental)
File "/Library/Python/2.6/site-packages/hyde-0.8-py2.6.egg/hyde/generator.py", line 302, in __generate_resource__
self.update_deps(resource)
File "/Library/Python/2.6/site-packages/hyde-0.8-py2.6.egg/hyde/generator.py", line 144, in update_deps
deps.extend(self.template.get_dependencies(rel_path))
File "/Library/Python/2.6/site-packages/hyde-0.8-py2.6.egg/hyde/ext/templates/jinja.py", line 592, in get_dependencies
ast = self.env.parse(text)
File "/Library/Python/2.6/site-packages/Jinja2-2.5.5-py2.6.egg/jinja2/environment.py", line 393, in parse
self.handle_exception(exc_info, source_hint=source)
File "<unknown>", line 1, in template
jinja2.exceptions.TemplateSyntaxError: Missing end of comment tag
Turns out, a recent change I made caused my compiled CSS files (I am not compiling using Hyde mechanisms currently, FWIW) to contain the string {#. Jinja2 freaked out because it thought it was the beginning of a comment.
The above is perfectly valid syntax in CSS; after all, if you are minifying your CSS and it contains an @media section that starts with an ID-based selector, then wham: @media something{#foo{...}}. And you won’t be able to hyde gen -r anymore.
Note that my CSS is within the content/media/css directory.
Basically, I’m not sure why my CSS is being parsed like templates.
I just hit this problem with minified css as well.
Yep, I got that error too.
I resolved that by moving the #foo after a class or comma, like this:
@media (rule) {.foo_class{...} #foo_ID{...} }
or
@media (rule) {.foo_class, #foo_ID{...} .other_class{...} }
I resolved that by changing the comment_start_string option of jinja2.Environment to {##, like this:
jinja2_environment = {
'comment_start_string': '{##',
},