Created
January 1, 2013 15:38
-
-
Save jonas-grgt/4428157 to your computer and use it in GitHub Desktop.
raw blocks preseve everything! No template tag rendering wil take place.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django import template | |
register = template.Library() | |
@register.tag(name="raw") | |
def raw(parser, token): | |
# Whatever is between {% raw %} and {% endraw %} will be preserved as | |
# raw, unrendered template code. | |
text = [] | |
parse_until = 'endraw' | |
tag_mapping = { | |
template.TOKEN_TEXT: ('', ''), | |
template.TOKEN_VAR: ('{{', '}}'), | |
template.TOKEN_BLOCK: ('{%', '%}'), | |
template.TOKEN_COMMENT: ('{#', '#}'), | |
} | |
# By the time this template tag is called, the template system has already | |
# lexed the template into tokens. Here, we loop over the tokens until | |
# {% endraw %} and parse them to TextNodes. We have to add the start and | |
# end bits (e.g. "{{" for variables) because those have already been | |
# stripped off in a previous part of the template-parsing process. | |
while parser.tokens: | |
token = parser.next_token() | |
if token.token_type == template.TOKEN_BLOCK and token.contents == parse_until: | |
return template.TextNode(u''.join(text)) | |
start, end = tag_mapping[token.token_type] | |
text.append(u'%s%s%s' % (start, token.contents, end)) | |
parser.unclosed_block_tag(parse_until) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment