【问题标题】:Invalid Block Tag i=0, in Django无效的块标记 i=0,在 Django 中
【发布时间】:2010-12-18 18:05:16
【问题描述】:

我正在阅读 Appengine 的 Python 入门指南,在阅读 templates 时,我修改了代码(这是一个简单的留言簿)以在留言簿条目旁边包含简单的编号。

在 index.html 中,我添加了(我认为应该是的)相关代码。

index.html(我在第 3 行添加了 {%i=0%},在第 5 行添加了 {%i+=1%},在第 7 行添加了 {{i}},其余来自指南):

<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'

我在 templates 上阅读了 Django 的帮助,上面写着

Django 模板系统提供 功能与某些类似的标签 编程结构——一个 if 标记 布尔测试,用于循环的 for 标记, 等等——但这些不仅仅是 作为相应的 Python 执行 代码,模板系统不会 执行任意 Python 表达式。

所以我猜,执行计算不是模板系统的用途。

tl;dr

谁能告诉我如何使用 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()

【问题讨论】:

    标签: python django google-app-engine


    【解决方案1】:

    来自http://www.djangobook.com/en/beta/chapter04/

    {% for item in todo_list %}
        <p>{{ forloop.counter }}: {{ item }}</p>
    {% endfor %}
    

    【讨论】:

      【解决方案2】:

      这取决于你需要什么。如果需要实际计数,可以在模板中使用 for 循环:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

      然后你可以使用 forloop.counterforloop.counter0 来检查索引。

      如果您只想显示数字列表,可以使用 html 有序列表。

      Django 的模板引擎仅用于设计,您希望将计算排除在外。如果你需要在模板层对你的数据做一些事情,你可以写一个custom tag/filter

      【讨论】:

      • 谢谢。有没有办法在模板系统中进行一些简单的计算?还是纯粹是为了展示?顺便说一句,这行得通。
      • Django 的模板系统在设计上仅用于演示。虽然可以编写自定义标签和过滤器来做其他事情。
      • 如果你想要一个编号列表,使用
        1. 标签。
      猜你喜欢
      • 1970-01-01
      • 2011-07-18
      • 2016-01-26
      • 2015-02-10
      • 1970-01-01
      • 2014-08-18
      • 2016-04-12
      • 2012-03-09
      • 1970-01-01
      相关资源
      最近更新 更多