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

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

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秒?或者我应该对此采取不同的方法吗?

非常感谢您的阅读。

【问题讨论】:

    标签: python html django python-2.7


    【解决方案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来获取新的页面内容。
    猜你喜欢
    • 2018-08-20
    • 2019-03-27
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多