Печать списков с помощью шаблона Mako (тег Django Join)

В этой статье такие шаблоны Django

{% for i in mylist %}
  <tr>
    <td>{{i.replist|join:"</td><td>" }}</td>
  </tr>
{% endfor %}

печатает список mylist, который является объектом. Можно ли это сделать в Мако? Спасибо.

ИЗМЕНИТЬ

class Rep(db.Model):
    author = db.UserProperty()
    replist = db.ListProperty(str)
    unique = db.ListProperty(str)
    date = db.DateTimeProperty(auto_now_add=True)

class MainPage(webapp.RequestHandler):
    def get(self):      
        user = users.get_current_user()
        greeting = None

        if user:
            greeting = ("Welcome, %s! (<a href=\"%s\">sign out</a>)" %
                         (user.nickname(), users.create_logout_url("/")))
        else:
            greeting = ("<a href=\"%s\">Sign in or register</a>." %
                        users.create_login_url("/"))

        L = []                                   
        s = self.request.get('sentence')           
        L.append(s)                              

        L = L[0].split('\r\n')     

        def f2(L):
            checked = []
            for e in L:
                if e not in checked:
                    checked.append(e)
            return checked

        Rep().replist = L                                   
        Rep().put()                              
        mylist = Rep().all().fetch(10)

        leng = len(mylist)
        T = type(mylist)
        self.response.out.write("Ttttt")
        print [i for i in mylist]       
        L2 = f2(L)
        x = len(L)
        y = len(L2)
        delta = x - y
        for i in range(delta):
             L2.append('')

         q = Rep().all()
         results = q.fetch(10)
        db.delete(results)



         template_values = {"s": s,
                           "L": L,
                           "L2": L2,
                           "x": x,
                           "y": y,
                           "greeting": greeting,
                           "mylist": mylist,
                           "leng": leng,
                           "T": T,
                           }

        path = os.path.join(os.path.dirname(__file__), 'main.mako')
        templ = Template(filename=path)
        self.response.out.write(templ.render(**template_values))  

person Zeynel    schedule 31.10.2010    source источник


Ответы (1)


http://www.makotemplates.org/docs/syntax.html#syntax_control

РЕДАКТИРОВАТЬ: я бы предложил использовать упорядоченный список или именованный кортеж вместо словаря, чтобы вы могли сосредоточиться на своем выводе, а не на своих данных.

% for entry in mylist:
    <tr>
        % for key, value in entry:
        <td>${value}</td>
        % endfor
    </tr>
% endfor

Вы можете вложить их, если вам нужно вывести много <td>. Чтобы выполнить часть соединения, просто используйте вложенный цикл.

person Scott    schedule 31.10.2010
comment
Я думаю, он ищет замену фильтру join, а не тегу for. - person Ignacio Vazquez-Abrams; 31.10.2010
comment
Да, я пытаюсь отобразить mylist, который является объектом списка: цикл mylist = Rep().all().fetch(10) for просто отображает объект, а не элементы объекта. - person Zeynel; 31.10.2010
comment
Можете ли вы привести пример одного из пунктов вашего списка? Если это объект, возвращаемый моделью, вы должны иметь возможность использовать ${i.member} вместо ${someVar} - person Scott; 31.10.2010
comment
Хорошо спасибо. Я добавил сценарий как редактирование выше. В нем много мусора, потому что я проверял ответы здесь. - person Zeynel; 31.10.2010
comment
Попробуйте использовать именованный кортеж вместо словаря, тогда вы сможете вызывать свои значения в том порядке, в котором они были установлены; словари не упорядочены и иногда могут вызвать головную боль. Кроме того, попробуйте использовать переменные с лучшими именами, это неприятно, но помогает удобочитаемости кода. - person Scott; 31.10.2010
comment
Спасибо. В этот момент я в замешательстве. Я думал, что использую список, а не словарь. продолжу завтра. Спасибо еще раз. - person Zeynel; 31.10.2010
comment
Возможно, я ошибался, попробуйте запустить отладчик и поставить точку останова на self.response.out.write(templ.render(**template_values)), чтобы вы могли проверить, что к чему. - person Scott; 31.10.2010