Отпечатване на списъци с шаблон Mako (таг за присъединяване на Django)

В тази статия 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>s. За да направите частта за свързване, просто използвайте вложен цикъл.

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