我在html页面上有一些链接,例如,目前我处理它们
<p> <a href="/cases/{{case.id}}/case_rate/-">rate down</a>
并有一个url.py条目:
(r'^cases/(?P<case_id>\d+)/case_rate/(?P<oper>.)$', 'mysite.cases.views.case_rate'),
然后我有一个处理逻辑并命中数据库的视图函数,然后执行此操作:
return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))
我有更好的方法吗?我可以看到这样做会怎么样,因为它必须重新绘制屏幕以显示新的评级...
答案 0 :(得分:1)
如果你问case_rate是否仍然应该在views.py中,因为它返回重定向而不是提供内容,答案是肯定的,因为case_rate正在处理请求并返回响应。
但是考虑一下你在views.py中有两个具有一些重复代码的视图函数的情况,并且你选择将重复的代码分解为另一个既不接受请求又返回响应的函数。在views.py中留下公平的游戏吗?当然,如果将其移动到其他地方会使代码更难阅读。或者您可以选择将其放在其他地方。根据您的品味,这真的是您的召唤。
答案 1 :(得分:1)
处理此问题的典型方法是使用ajax请求。
而不是链接,您放置一个调用视图的javascript处理程序,更新数据库,并返回一个具有该项目新评级的json / xml对象。然后另一个javascript句柄接收该响应并更新屏幕上的评级号,而不重新加载页面。
理想情况下,您将保留两个版本:普通html(您当前拥有的)和ajax版本。 ajax可以在页面加载后附加到元素,所以如果javascript不可用,你仍然会有一个工作站点。
然后,关于组织,您可以在视图上使用“ajax”参数。视图应相应地更新db,如果是ajax调用,则返回json / xml响应,否则返回新页面。这样你就可以在一个地方保留逻辑(获取对象,更新数据库)。