0

我在 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','/'))

有一个更好的方法吗?我可以看到这会如何,因为它确实必须重绘屏幕才能显示新评级......

4

2 回答 2

1

如果您询问 case_rate 是否仍然应该进入 views.py ,因为它返回重定向而不是提供内容,答案是肯定的,因为 case_rate 正在处理请求并返回响应。

但是考虑这样一种情况,您在 views.py 中有两个视图函数,它们有一些重复的代码,并且您选择将该重复代码分解到另一个既不接受请求又不返回响应的函数中。留在views.py中是公平的游戏吗?当然,如果将它移到其他地方会使代码更难阅读。或者你可以选择把它放在别处。这真的是你根据你的味觉来决定的。

于 2009-05-23T05:12:57.450 回答
1

处理此问题的典型方法是使用 ajax 请求。

您放置了一个调用视图的 javascript 处理程序,而不是链接,它会更新数据库,并返回一个带有该项目新评级的 json / xml 对象。然后另一个 javascript 句柄接收该响应并更新屏幕上的评级数字,而无需重新加载页面。

理想情况下,您将保留两个版本:纯 html(您当前拥有的版本)和 ajax 版本。ajax 可以在页面加载后附加到元素上,所以如果 javascript 不可用,您仍然有一个工作站点。

然后,关于组织,您可以在视图中添加“ajax”参数。视图应该相应地更新数据库,如果是 ajax 调用,则返回 json / xml 响应,否则返回新页面。这样您就可以将逻辑(获取对象、更新数据库)保留在一个地方。

于 2009-05-23T14:02:52.343 回答