【问题标题】:where do functions that don't display go in djangodjango中不显示的函数在哪里
【发布时间】:2010-10-28 09:22:08
【问题描述】:

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

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

【问题讨论】:

  • 请记住,视图并不意味着它必须将任何数据传递给模板。视图只是“接受请求并返回响应”。在这种情况下,您的响应是重定向。

标签: django django-views


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 2014-07-21
      • 1970-01-01
      • 2011-03-18
      • 2012-07-31
      • 2015-07-13
      • 1970-01-01
      相关资源
      最近更新 更多