尝试在Django中创建一个Display,看起来像这样。
link:http://i47.tinypic.com/2lk2mw2.png
问题:到目前为止,我不确定如何允许用户编辑评论栏并在数据库中显示更改
**
**
{% for item in nodes %}
<tr>
<td class = "tablebord"><a href ="/nodes/node/{{ item.nodeid }}/">{{
item.nodeid }}</a></td>
<td class = "tablebord">{{ item.lastseen }} </td>
<td class = "tablebord"><div contenteditable>{{ item.comment }} <p>
<form action="" method="get">
<input type="text" name="q">
<input type="submit" value="test">
</form>
</p> </div> </td>
<td class = "tablebord">{{ item.lastipaddr }} </td>
</tr>
{% endfor %}
答案 0 :(得分:2)
我遇到的一个解决方案:
在HTML中:
将表格中的方法更改为POST。
将CSRF令牌添加到表单。
使用nodeid添加隐藏输入以便在视图中进行解析。
使用当前评论预填充输入。
<!-- Comment Cell -->
<td class = "tablebord">
<div contenteditable>
<form action="" method="post"> {% csrf_token %}
<input type="text" name="comment" value={{ item.comment }} />
<input type="hidden" value={{ item.nodeid }} name="nodeid" />
<input type="submit" value="edit" />
</form>
</div>
</td>
在views.py中:
导入CSRF令牌和节点模型的装饰器
使用CSRF Protect装饰视图。
检查表单是否已提交。
如果是,请获取节点并更改评论。
渲染模板。
# decorator
from django.views.decorators.csrf import csrf_protect
from app.Node.models import Node
# view to handle table
@csrf_protect
def fruits(request):
nodes = Nodes.objects.all()
# user is posting: get edited node, change comment, and save
if request.POST:
nodeid = request.POST.get('nodeid')
edited_node = nodes.get(nodeid=nodeid)
edited_node.comment = request.POST.get('comment')
edited_node.save()
# render template with nodes
return render(request, 'fruits.html', {'nodes':nodes})
希望这能解决您的问题。