如何在 Django 中重复调用 views.py 中的函数?

Posted

技术标签:

【中文标题】如何在 Django 中重复调用 views.py 中的函数?【英文标题】:How can I repeatedly call a function from a views.py in Django? 【发布时间】:2018-02-21 12:04:56 【问题描述】:

urls.py

urlpatterns = [
    url(r'^$', views.index),
    url(r'^report/(?P<extension>\d+)/$', views.report),
]

views.py

def report(request, extension):

    """
        I will do some logic here. I need the extension variable for 
        database purposes.
      EX: 
        my_array = Report.objects.fetching_reports(extension='3')
    """

    return render(request, 'report.html’)

如果你注意到扩展,我传入了 3。这个想法是每个扩展都有自己的数据。但是,我希望它们在同一个 html 模板上呈现。我将从扩展 1 开始渲染,直到 12 然后返回到 1。假设扩展 4 丢失,它将被重定向到扩展 5。这些扩展将来自我的数据库。

Example:

…/report/1/
…/report/2/
…/report/3/    ## will skip 4 if not available 
…/report/5/
…/report/6/    ## and so on..

每个扩展都将呈现相同的 HMTL 模板。现在,如果我直接在浏览器中键入 URL 模式,我可以成功呈现这些报告。有没有办法连续调用report(),比如说每15秒?或者我应该对此采取不同的方法吗?

非常感谢您的阅读。

【问题讨论】:

【参考方案1】:
def report(request, extension):

    try:
        my_array = Report.objects.fetching_reports(extension=extension)
    except Report.DoesNotExist:
        my_array = None

    extension +=1

    if my_array = None:
        return HttpResponseRedirect(reverse('your_project_name':'your_app_name', kwargs = 'extension':extension))
    else:
        return render(request, 'report.html', 'extension':extension)

如果 4 不存在将跳到下一个对象,如果你想在 15 秒后跳过,你可以做一个 javascript 重定向到下一页并使用扩展 var

【讨论】:

你好,毛里西奥。立即尝试并更新您!非常感谢 如果我现在不加一个JS,怎么重定向到下一个扩展? 这很难,因为 Django 只是将模板发送到浏览器,仅此而已。唯一的方法是使用js。别忘了接受它 我可以这样做吗? def my_report(request, extension): ## some logic return render(request, 'index.html') def render(request): extensions_array = [1,2,3,4,5,6,7] for i in extensions_array : my_report(extension=i) ## 我可以这样做吗? ## 然后在我的 js 中我可以继续调用这条路线 最好的方式和可扩展性就像@Haken 说的那样,只需将 next 替换为我在评论中输入的内容,记住传递扩展名 var【参考方案2】:

对于每个报告,将 next url 传递给模板并使用 javascript 重新加载。

<script>
  function nextReport()  window.location.href = " next "; 
  setTimeout(nextReport, 15000);
</script>

【讨论】:

也许你可以使用 % url 'your_project:your_app' exception % 谢谢!我其实一直在使用 JS 重定向功能。但我想看看我是否也可以在后端做这样的事情。 没有。你不能只在后端这样做。如果想避免浏览器刷新,可以使用ajax来获取新的页面内容。

以上是关于如何在 Django 中重复调用 views.py 中的函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Ajax jQuery 将简单数据发送到 Django 中的views.py?

如何在 django view.py 中调用远程 api?

如何在 Views.py 中运行子进程——Django

如何在 django views.py 中随机播放列表?

Django - 如何在views.py中访问实例的值

04-在views.py中使用class编写django项目