2011-08-30 170 views
0

我試圖讓用戶從覈對清單的形式提供的業餘愛好列表中挑選業餘愛好。當他們被選中時,所選擇的愛好會進入用戶表。我想讓我的複選框顯示用戶的興趣愛好,就好像選擇了興趣愛好一樣,它會被檢查,如果沒有檢查它。用戶可以通過選中或取消選中複選框來更新他們的業餘愛好。
我無法以選中或未選中的形式顯示用戶興趣愛好的當前狀態,並從中更新用戶興趣表。顯示選中元素爲複選框的複選框

class InfoPage(BasePage): 
    title = 'One Macnica' 

    def get(self): 
    self.write_page_header() 

    hobbies_list = Hobby.all().fetch(100) 



    template_values = {"hobbies_list": hobbies_list} 
    path = os.path.join(os.path.dirname(__file__), 'templates') 
    path = os.path.join(path, 'hobby.html') 
    self.response.out.write(template.render(path, template_values)) 
    self.write_page_footer() 

    def post(self): 

    self.write_page_header() 

    hobbies_list = Hobby.all().fetch(100) 


    if self.request.get("hobby"): 
     hobby_name = self.request.get('hobby') 
     new_hobby = Hobby(name=hobby_name.strip(), key_name = hobby_name.strip()) 

     #fetch attendee and add new hobby 
     attendee_query = Attendee.gql('WHERE email = :1', 
      users.get_current_user().email()) 
     attendee = attendee_query.fetch(1) 
     attendee = attendee.pop() 
     hobbies = attendee.hobbies 
     hobbies.append(new_hobby.key()) 
     attendee.hobbies = hobbies 
     #eliminate the dupliate 
     hobbies = list(set(hobbies)) 
     attendee.hobbies = hobbies 
     attendee.put() 



    template_values = {"hobbies_list": hobbies_list} 
    path = os.path.join(os.path.dirname(__file__), 'templates') 
    path = os.path.join(path, 'hobby.html') 
    self.response.out.write(template.render(path, template_values)) 
    self.write_page_footer() 

hobby.html如下

<h1 id="header">One Macnica</h1> 
<p>Welcome to One Macnica, a place dedicated to connecting Macnica as 1. 
</p> 
<form name="hobby" action="/hobby" method="post"> 


{% for hobby in hobbies_list %} 
    <input type="checkbox" name = "{{hobby.name}}"/>{{hobby.name}}<br/> 
{% endfor %} 


<input type="submit" value="Select Hobbies"> 
</form> 

目前我正在考慮讓.584清單列表,所有的業餘愛好列表進行比較,以參加者的愛好列表中,如果有,返回檢查,如果不返回null。 我實際上在編碼時遇到麻煩,不知道這是否是最好的方法。

任何幫助將不勝感激。

+0

您在這裏使用哪種模板語言? –

+0

我使用的是GAE中的django – minarai

回答

1
{% for hobby in hobbies_list %} 
    <input type="checkbox" {% if hobby in user.hobbies %}checked="yes"{% endif %} name = "{{hobby.name}}"/>{{hobby.name}}<br/> 
{% endfor %} 
+0

謝謝史蒂夫。我試過了,我得到 TemplateSyntaxError:無法解析餘數:'yes'如果愛好在attendee.hobbies其他'' – minarai

+0

對不起,我認爲這是在Django模板的語法,但它必須是特定於jinja2。使用這個略微醜陋的語法,「{%if user.hobbies%中的愛好} checked =」yes「{%endif%}'。 –

+0

我試過了,我得到了TemplateSyntaxError:'if'語句格式不正確。 我也試過如果出就像 {%for hobby in hobbies_list%} {%if hobby in attendee.hobbies%} {{hobby.name}}
{%endfor%} {{hobby。 }
{%endfor%} 我仍然得到相同的錯誤..... aaa – minarai

1

最簡單的方法是使用表單庫,如Django表單或WTForms。當您已經完成了大量的表單處理代碼時,無需編寫任何代碼。

+0

感謝尼克,我會研究這些。 – minarai

+1

我很想知道是誰投了票,爲什麼。如果你認爲答案是錯誤的,留下評論是有建設性的。 –

1

這應該爲 「選中」 屬性工作(其餘是史蒂夫回答):

checked={{ hobby in user.hobbies and "checked" or "" }} 

UPDATE:

我沒有使用該模板引擎很長一段時間。我相信這是因爲你不能在{{ }}內使用in,and,or

醜陋的解決方法是:

checked={% if hobby in user.hobbies %}"checked"{% else %}""{% endif %} 

希望它能幫助。

+0

我仍然使用史蒂夫的答案得到同樣的錯誤.. – minarai