目标:上一节课最后一小节讲的是怎么将网页输入修改数据库, 这一节课的目标反过来, 是将数据库内容显示在网页上.
知识点:{{ ** }}, {% if ** %}**{% endif %}
1. 改写Views代码, 引用字典
def getform(request):
message = None
all_messages = UserMessage.objects.filter(name='bobby')
for message in all_messages:
message = all_messages[0]
return render(request, 'message/form.html',{
"my_message": message # render可以以字典方式传入参数, "my_message"是随意命名的,留待form.html中引用.
})
2. 改写form.html代码, 增加逻辑
<input id="name" type="text" value="{% if my_message.name == 'bobby' %}bobby has name{% endif %}" name="name" class="error" placeholder="请输入您的姓名"/> .......# 中间代码不变, 省略. <input id="email" type="email" value="{{ my_message.email }}" name="email" placeholder="请输入邮箱地址"/>
......# 中间代码不变, 省略.
<input id="address" type="text" value="{% if my_message.name == 'bobby' %}{{ my_message.address }}{% endif %}" name="address" placeholder="请输入联系地址"/>
......# 中间代码不变, 省略.
<textarea id="message" name="message" placeholder="请输入你的建议">{{ my_message.message }}</textarea>
这里有不同的写法:
a. input
增加一项value="{{ my_message.email }}", 这样就能调用views中render传过来的{ "my_message": message }
b. input
增加一项value="{% if my_message.name == 'bobby' %}bobby has name{% endif %}", 增加if逻辑判断, 如果名字叫bobby, 则显示bobby has name.c. input
增加一项value="{% if my_message.name == 'bobby' %}{{ my_message.address }}{% endif %}", 将判断语句与{{ my_message.address }}一起使用.
d. textarea
if语句或者{{ my_message.message }} 需要写在尖括号对应中间 > </textarea>
3. 使用slice内置函数
<input id="name" type="text" value="{% if my_message.name|slice:'5' == 'bobby' %}bobby has name{% else %}bobby not name{% endif %}" name="name" class="error" placeholder="请输入您的姓名"/>
my_message.name|slice:'5', 意思是取my_message.name的前5个字母, 详细解释可查看官方文档Django document
4. 配置url别名
a. 在training_py34/urls下修改:
url(r'^form/$', getform, name="go_form"),
将form这个url命名为"go_form", 然后在form.html中引用, 这样即使未来修改了前面的正则表达式, 也不用在各处修改url.
b. 修改views中form的url为别名
<form action="{% url 'go_form' %}" method="post" class="smart-green">