Недопустимый тег блока i = 0, в Django - PullRequest
1 голос
/ 18 декабря 2010

Я просматривал руководство Appengine по началу работы с python, читая шаблонов , я изменил код (простая гостевая книга), добавив простую нумерацию рядом с записями гостевой книги.

В index.html я добавил (как я думал, будет) соответствующий код.

index.html (я добавил {% i = 0%} в строке 3, {% i + = 1%} в строке 5 и {{i}} в строке 7, остальныеэто из руководства):

<html>
  <body>
    {%i=0%}
 {% for greeting in greetings %}
    {%i+=1%}
   {% if greeting.author %}
        <b>{{i}}:{{ greeting.author.nickname }}</b> wrote:
      {% else %}
       An anonymous person wrote:
      {% endif %}
      <blockquote>{{ greeting.content|escape }}</blockquote>
    {% endfor %}

    <form action="/sign" method="post">
      <div><textarea name="content" rows="3" cols="60"></textarea></div>
      <div><input type="submit" value="Sign Guestbook"></div>
    </form>

    <a href="{{ url }}">{{ url_linktext }}</a>

  </body>
</html>

Я получил следующую ошибку

TemplateSyntaxError: недопустимый тег блока: 'i = 0'

Я прочитал справку Джанго по шаблонам , в которой говорится, что

Система шаблонов Django предоставляет теги, которые функционируют аналогично некоторым программным конструкциям - тег if для логических тестов,для тега для зацикливания и т. д. - но они не просто выполняются как соответствующий код Python, и система шаблонов не будет выполнять произвольные выражения Python.

Так что я предполагаю, что выполнение вычислений не то, чтосистема шаблонов для.

tl; dr

Может кто-нибудь сказать мне, как нумеровать мои записи или использовать конструкцию «counter-increment» с использованием Djangoшаблоны?

Не думаю, что этот код необходим, но чтобы завершить картину,

Неизменный код helloworld.py:

import os
from google.appengine.ext.webapp import template
import cgi

from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db

class Greeting(db.Model):
    author = db.UserProperty()
    content = db.StringProperty(multiline=True)
    date = db.DateTimeProperty(auto_now_add=True)

class MainPage(webapp.RequestHandler):
def get(self):
    greetings_query = Greeting.all().order('-date')
    greetings = greetings_query.fetch(10)

    if users.get_current_user():
        url = users.create_logout_url(self.request.uri)
        url_linktext = 'Logout'
    else:
        url = users.create_login_url(self.request.uri)
        url_linktext = 'Login'

    template_values = {
        'greetings': greetings,
        'url': url,
        'url_linktext': url_linktext,
        }

    path = os.path.join(os.path.dirname(__file__), 'index.html')
    self.response.out.write(template.render(path, template_values))
class Guestbook(webapp.RequestHandler):
    def post(self):
        greeting = Greeting()

        if users.get_current_user():
            greeting.author = users.get_current_user()

        greeting.content = self.request.get('content')
        greeting.put()
        self.redirect('/')

application = webapp.WSGIApplication(
                                     [('/', MainPage),
                                      ('/sign', Guestbook)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

Ответы [ 2 ]

2 голосов
/ 18 декабря 2010

С http://www.djangobook.com/en/beta/chapter04/

{% for item in todo_list %}
    <p>{{ forloop.counter }}: {{ item }}</p>
{% endfor %}
0 голосов
/ 18 декабря 2010

Зависит от того, для чего это нужно. Если вам нужно фактическое количество, вы можете использовать цикл for в шаблоне: http://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

Затем вы можете использовать forloop.counter или forloop.counter0 для проверки индекса.

Если вы просто хотите отобразить список номеров, вы можете использовать упорядоченный список html.

Шаблонный движок Django предназначен только для дизайна, и вы хотите не использовать в нем вычисления. Если вам нужно что-то сделать со своими данными на уровне шаблона, вы можете написать пользовательский тег / фильтр .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...