2011-05-10 149 views
1

我想一個webapp模板內創建一個ReferenceProperty關鍵的字符串:字符串轉換

假設以下簡單的數據存儲模式:

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

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

我再傳給列表Email實體添加到名爲member_list的列表中的webapp模板。在模板中,我要創建的每個電子郵件實體的「用戶」屬性的使用的密鑰的字符串的URL,如:

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

我知道我可以在關鍵的字符串傳遞給模板,但如果可能的話,我寧願在模板中進行字符串轉換;我嘗試過各種排列str()_ str_無濟於事。

回答

1

既然你知道有問題的實體將是一個Member實例,想必不會有一個父實體,這是更簡單(併產生更好URL)使用成員的密鑰名稱或ID,而不是完整的字符串密鑰。你可以用user.key().name()(在Django模板user.key.name)或user.key().id()得到這個。您需要哪一個取決於您是否使用鍵名創建實體。

如果你有一個電子郵件的對象,沒有必要來從它的User只是爲了獲得其關鍵。相反,調用Email.user.get_value_for_datastore(member),這將返回User它引用的Key對象。然後,您可以根據需要提取相關字段。有沒有辦法做到這一點在Django,雖然如此,你要麼需要做的Django之外,並通過它,或添加一個方法到Email類返回鍵。

一旦您有一個ID或名稱,並且想要取回User對象,請根據需要調用User.get_by_id(id)User.get_by_key_name(name)

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

member.user.key應該做的伎倆:

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

感謝。我愚蠢地嘗試{{member.user.key()}} – 2011-05-10 21:12:16

+0

@Jeff這就是爲什麼我不喜歡Django的webapp模板;我更喜歡直接使用Python語法的模板。 – systempuntoout 2011-05-10 21:19:31

+0

聽起來很有吸引力。我從去年夏天開始閱讀你的問題重新模板....現在你有什麼高層建議?我是web dev的新手,並且只在GAE的webapp模板上玩過一個玩具項目。 – 2011-05-11 17:13:25