我试图让用户从清单形式提供的业余爱好列表中挑选爱好。选择它们后,所选择的爱好就会进入用户表。我希望我的复选框能够显示用户的爱好,就好像选择了爱好一样,它被检查,如果没有检查它。用户可以通过选中或取消选中复选框来更新自己的爱好 我无法以选中或未选中的形式显示用户爱好的当前状态,并从中更新用户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。 我实际编码时遇到了麻烦,不知道这是不是最好的方法。
任何帮助将不胜感激。
答案 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
内使用and
,or
,{{ }}
。
Uglier的解决方法是:
checked={% if hobby in user.hobbies %}"checked"{% else %}""{% endif %}
希望它有所帮助。