我正在尝试在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_
的各种排列无效。
答案 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
对象后,请根据需要致电User
或User.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>