Genshi to Jinja2

38 views
Skip to first unread message

Gabriel Alves

unread,
Dec 10, 2019, 3:56:57 PM12/10/19
to Trac Users
Hey guys, I'm porting a plugin to trac 1.4 (from 1.0) but I'm having some trouble with Jinja2 sintax.

I read on docs trac 1.4 still can use genshi templates, so I solved some code problems (related to trac changes) and tried to ran, but it not worked. Then I started to replace genshi for jinja2, but I don't know how to replace some syntax details. For example:


1. I'm doing some modification on ticket.html, so I have and .html file that extends ticket.html and use parent(super()) in head and body. But I need to insert some things in the middle of parent code. I need to do it using javascript/jquery or can I do something else using jinja2? (in genshi syntax, I'm doing a lot of modifications based on py:match)

2. If I have a syntax like this:
            <tr py:if="can_create_at_least_one_referenced_type">
                <th class="col1">Associate New:</th>
                <td class="fullrow" colspan="3">
                    <ul class="references" py:for="item in create_referenced"
                        py:with="keys = item.get_option('copy');
                                 copied_fields = dict(zip(map(str, keys), [ticket[key] for key in keys]))">
                        <li><a href="${href.newticket(type=item.dest_type, src=ticket.id, **copied_fields)}">Create a new referenced '${ticket.get_alias(item.dest_type)}'</a></li>
                    </ul>
                </td>
            </tr>
 and replace with this:
            <tr>
                # if can_create_at_least_one_referenced_type:
                <th class="col1">Associate New:</th>
                <td class="fullrow" colspan="3">
                    <ul class="references">
                        # for item in create_referenced:
                        # with
                        # set keys = item.get_option('copy')
                        # set copied_fields = dict(zip(map(str, keys), [ticket[key] for key in keys]))
                            <li><a href="${href.newticket(type=item.dest_type, src=ticket.id, **copied_fields)}">Create a new referenced '${ticket.get_alias(item.dest_type)}'</a></li>
                        # endwith
                        # endfor
                    </ul>
                </td>
                # endif
            </tr>
Red line return a error:
# set copied_fields = dict(zip(map(str, keys), [ticket[key] for key in keys]))
TemplateSyntaxError: expected token ',', got 'for'
Seems it not recognizes full command and think for is a param. I tried some tricks, but nothing done.

3. How can I write special symbols like:
    #   set directions=[(ticket.get_incoming_dict(), 'Referenced by', '&amp;larr;', True), (ticket.get_outgoing_dict(), 'References', '&amp;rarr;', False)]
(left and right arrows)

4. How macro works? I have a file1.html extending ticket.html. The first one needs to include file2.html(macro) and call ${macro1(params...)} in file1.html, right? I already have a file3.html(macro too) and file2.html needs to include it and call ${macro2(params...)}. How can I correctly describe it in terms of code?


att,
Gabriel Alves

RjOllos

unread,
Apr 24, 2020, 2:08:22 AM4/24/20
to Trac Users


On Tuesday, December 10, 2019 at 12:56:57 PM UTC-8, Gabriel Alves wrote:
3. How can I write special symbols like:
    #   set directions=[(ticket.get_incoming_dict(), 'Referenced by', '&amp;larr;', True), (ticket.get_outgoing_dict(), 'References', '&amp;rarr;', False)]
(left and right arrows)

I believe in that case you can use a unicode character rather than html entity. 
Reply all
Reply to author
Forward
0 new messages