I have written for a personal django app (actually a blog), a new
restructured text role that allows to use TeX syntax and rendering math
formulas; the problem is that I don't want to allow this in comment. To
avoid to load the TeX related role I use the following snippet of code
where I delete the role directly by popping it from roles._role_registry
dictionary



@register.tag(name='restructuredTextWO')
def restructured_text_without(parser, token):
    nodelist = parser.parse(('endrestructuredTextWO',))
    parser.delete_first_token()

    try:
        tag_name, role_name = token.contents.split(None, 1)
    except ValueError:
        raise template.TemplateSyntaxError(
                '%r tag requires an argument' % token.contents.split()[0])

    return Without(nodelist, role_name)

class Without(template.Node):
    def __init__(self, nodelist, role_name):
        if settings.DEBUG:
            print 'Without', role_name
        self.nodelist = nodelist
        self.role_name = role_name
        self.role_fn = None

    def render(self, context):
        from docutils.parsers.rst import roles

        self.role_fn = roles._role_registry.pop(self.role_name, None)

        output = self.nodelist.render(context)

        if self.role_fn:
            roles._role_registry[self.role_name] = self.role_fn

        return output



In the template I have



        <h1 class="blog_header">{{blog.title|capfirst}}</h1>
        <h3 class="blog_creation_date">
                {{blog.creation_date|date:"D d M Y"}}
        </h3>
        <div class="blog_content">
                {{blog.content|restructuredtext}}
        </div>

        <h2>Comments</h2>

        {% get_comment_list for blog as comments %}
        {% for comment in comments %}
                {% comment_entry comment %}
        {% endfor %}



where comment_entry is a inclusion tag defined as



{% load markup %}
{% restructuredTextWO tex %}
<div class="entry">
        <h3>posted by <a href="{{site}}">{{username}}</a>
                at {{date|date:"D d M Y"}}</h3>
        <p>{{content|restructuredtext}}</p>
</div>
{% endrestructuredTextWO %}




Now, the problem is that this doesn't work if also the blog contains the
:tex: role and I don't understand why: there is something I'm missing in
how the template rendering works?

I would appreciate some hints about that.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to