如何在 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 中的函数?的主要内容,如果未能解决你的问题,请参考以下文章