显示选中元素的复选框已选中

时间:2011-08-30 02:25:05

标签: python html google-app-engine

我试图让用户从清单形式提供的业余爱好列表中挑选爱好。选择它们后,所选择的爱好就会进入用户表。我希望我的复选框能够显示用户的爱好,就好像选择了爱好一样,它被检查,如果没有检查它。用户可以通过选中或取消选中复选框来更新自己的爱好 我无法以选中或未选中的形式显示用户爱好的当前状态,并从中更新用户hobbie表。

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>

我正在考虑为爱好清单制作一个列表,将所有爱好列表与参与者的爱好列表进行比较,如果在那里,则返回选中,如果不是则返回null。 我实际编码时遇到了麻烦,不知道这是不是最好的方法。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

最简单的方法是使用表单库,如Django表单或WTForms。当它已经为你完成时,不需要编写大量的表单处理代码。

答案 2 :(得分:1)

这应该适用于“已检查”属性(其余的是史蒂夫回答):

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

<强>更新

我很长时间没有使用过该模板引擎。我相信这是因为您无法在in内使用andor{{ }}

Uglier的解决方法是:

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

希望它有所帮助。