从数据库传递URL参数

时间:2017-09-11 21:26:51

标签: python html django python-2.7

我正在尝试构建一个完整的堆栈Web应用程序。在我的数据库中,我有一个包含大量数据的表,如下所示:

SHOWS
ID          show_name              show_number
1              First Show                  2
2              Second Show                 1
3             Third Show                   1
4              fourth Show                 2
5              Fifth Show                  3
6             Sixth Show                   1 

如果你可以看到,我在旁边显示了一个列号。此节目编号可以是1-32中的任意数字。我想要做的是通过设置url模式来获得一个URL,将这些show_number作为一种参数。

在我的urls.py中

urlpatterns = [
    url(r'^show/(?P<show_number>\d+)$', views.slideshow),
]

当我去... / show / 1 /时, show_number 1的所有行都将在该页面上。如果我去... ../ show / 2 / show_number 2的所有行都会去那里等等。

在我的models.py中:

def show_screen(self):
    with connection.cursor() as cursor:
        cursor.execute("SELECT show_number, show_name FROM shows ORDER BY show_number ASC;")
        data = cursor.fetchall()
        return data

在我看来:

def slideshow(request):
    context = {
        "shows": Show.objects.all()
    }
    return render(request, 'index.html', context)

在这个项目结束时,我的目标是让我的网址每隔一秒动态更改一次。有没有办法直接从数据库传递url模式?

让我们说每30秒,我的页面应该转到

www./....../show/1/
www./....../show/2/
www./....../show/3/
www./....../show/7/
www./....../show/19/

到达最后一个URL参数后,它会返回到第一个URL。

非常感谢您的阅读!

1 个答案:

答案 0 :(得分:1)

您的观点需要接受您在show_number中定义的urls.py变量:

def slideshow(request, show_number):

然后,您需要根据show_number

的值过滤show对象
Show.objects.filter(show_number=show_number)

完整视图代码:

def slideshow(request, show_number):
    context = {
        "shows": Show.objects.filter(show_number=show_number)
    }
    return render(request, 'index.html', context)

对于问题的第二部分,我会执行以下操作:

  • 确定slideshow视图
  • 中的下一个网址服务器端
  • 将此网址作为回复的一部分返回
  • 在转换到下一张幻灯片时,在客户端使用javascript加载此新网址
    • e.g。 window.location.href = '://your_url';