GAE webapp模板中的字符串转换

时间:2011-05-10 20:47:55

标签: google-app-engine

我正在尝试在webapp模板中创建ReferenceProperty密钥的字符串:

假设以下简单数据存储模型:

def User(db.Model):
  first_name = StringProperty()
  last_name = StringProperty()

def Email(db.Model):
  user = ReferenceProperty(User)
  email = EmailProperty()

然后,我将电子邮件实体列表传递给名为member_list的列表中的webapp模板。在模板中,我想创建一个每个电子邮件实体的“用户”属性的密钥字符串,以便在URL中使用,例如:

   {% for member in member_list %}
   <a href="/member_handler/{{INSERT_STRING_OF_MEMBER.USER_KEY_HERE"}}>blah</a>

我意识到我可以将一串密钥传递给模板,但如果可能的话,我更愿意在模板中进行字符串转换;我尝试了str()_ str_的各种排列无效。

3 个答案:

答案 0 :(得分:1)

由于您知道有问题的实体将是Member实例,并且可能不会有父实体,因此使用成员的密钥名称或ID会更简单(并生成更好的URL),而不是完整的字符串键。您可以使用user.key().name()(Django模板中的user.key.name)或user.key().id()来获取此信息。您需要哪一个取决于您是否使用密钥名称创建了实体。

如果您有一个电子邮件对象,则无需从中获取User只是为了获取其密钥。而是调用Email.user.get_value_for_datastore(member),它将返回它引用的Key的{​​{1}}对象。然后,您可以根据需要提取相关字段。但是,在Django中没有办法做到这一点,所以你需要在Django之外做它并传入它,或者向返回键的User类添加一个方法。

拥有ID或名称并希望获取其引用的Email对象后,请根据需要致电UserUser.get_by_id(id)

答案 1 :(得分:0)

<a href="/member_handler/{{ member.user.key }}">blah</a>

答案 2 :(得分:0)

member.user.key应该这样做:

{% for member in member_list %}
   <a href="/member_handler/{{member.user.key"}}>blah</a>