【问题标题】:Google appengine string replacement in template file模板文件中的 Google appengine 字符串替换
【发布时间】:2010-11-27 20:45:05
【问题描述】:

我正在使用 google appengine(当然是 python :)),我想对模板文件中的字符串 进行 string.replace

{% for item in items %}

{{ item.code.replace('_', ' ') }}

{% endfor %}

但这不起作用。因此,我们不能在应用引擎模板中执行除基本检查之外的任何操作。对吗?


另一个相关问题是我正在尝试缩短字符串并使其可用于模板。

每个家具对象都有一个名称和一个较长的描述字段。在我正在渲染的这个视图中,我只需要 description 字段的前 50 个字符。

所以我尝试了类似的东西

items = db.GqlQuery('从家具中选择 *') # edit: 如果你把上面的行改为 # items = db.GqlQuery('从家具中选择 *').fetch(1000) # .fetch() 命令可以添加动态属性! 对于项目中的项目: item.shortdescr = item.description[0:50] # 将数据传递给模板进行渲染 self.response.out.write( template.render('furnitureAll.html', { 'items' : items } ) )

模板去

{% for item in items %}

{{ item.name }}

{{ item.shortdescr }}

{% endfor %}

由于这不起作用,我尝试更改 Gql 查询以缩短字符串。但我很快意识到 Gql 不像 SQL。我正在尝试编写类似的查询

从家具中选择名称,LEFT(描述,50)

收效甚微

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    我对 Google AppEngine 的经验很少,但我的理解是它与 Django 密切相关。您的模板实际上并不包含 Python 代码,即使您在其中使用的某些结构看起来很像。

    您的两个问题都应该使用模板过滤器来解决。如果是 Django,我会用这样的东西来回答你的第二个问题:

    {{ item.description|truncatewords:10 }}
    

    对于您的第一个问题(字符串替换),可能没有您可以使用的内置过滤器。您将需要自己编写。像这样的东西;

    from google.appengine.ext.webapp.template import create_template_register
    
    register = create_template_register()
    
    @register.filter
    def replace_underscores(strng):
        return strng.replace('_', ' ')
    

    然后,在您的模板中,您可以这样做:

    {{ item.code|replace_underscores }}
    

    【讨论】:

    • 谢谢老兄。 ftr truncatewords:arg 之间似乎应该有一个冒号,即。像 truncatewords:10.
    【解决方案2】:

    除了代码中没有参数的.fetch() 调用之外,我认为这不可能工作(你总是必须传递fetch 一个参数——你愿意获取的实体的最大数量! ),我无法重现您的问题 - 为每个项目分配一个新属性(包括通过处理现有属性获得的属性)在我的测试中效果很好。

    您能否以尽可能小的指南针重现您观察到的问题并编辑您的问题以包含所有相关文件?似乎是我们可以帮助您解决您观察到的奇怪错误的唯一方法!

    顺便说一句,select name,LEFT( description, 50 ) 或任何当然在 GQL 中都不起作用的东西——GQL,非常非常明确,只支持 select * 获取整个实体,或 select __key__ 只获取实体的密钥——那就是全部;选择中的列没有选择性,更不用说对它们进行任何操作了!-)

    【讨论】:

    • 有罪。我添加了 .fetch() 没有测试 b/c 它以前不存在 - 没有它也可以工作,但我认为我应该将它添加到问题的“官方”版本中。
    • 哇哦!添加 .fetch(100) 使添加动态字段起作用!
    • 如果没有 fetch 你还没有一个列表,你就有一个查询(可迭代,但不是一个列表)。但是fetch 需要一个参数(要获取的最大项目数)来返回一个列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2023-04-01
    • 2018-09-15
    • 1970-01-01
    • 2011-10-14
    • 2021-01-05
    相关资源
    最近更新 更多