【问题标题】:Passing URL params from the database从数据库传递 URL 参数
【发布时间】:2018-02-20 05:18:29
【问题描述】:

我正在尝试构建一个全栈 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 模式来拥有一个将这些 show_number 作为参数类型的 URL。

在我的 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。

非常感谢您的阅读!

【问题讨论】:

  • 从数据库传递url的目的是什么?您的数据库中没有存储任何 url。
  • 是什么决定了您的网址列表中的下一个show_number?还是这个列表是你设置的?
  • 我将 show_number 作为我的 url 的 url 模式的一部分传递。我的数据库中没有 url 字符串。我只有 show_number 我想成为我的网址的一部分。这些 show_number 由客户选择。他们可以从 1-32 中选择一个数字。
  • 我明白这一点。我的问题是在您的帖子末尾引用您的问题:Is there a way to pass a url pattern directly from the database? 我不确定您的意思。

标签: python html django python-2.7


【解决方案1】:

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

def slideshow(request, show_number):

那么你需要根据show_number的值来过滤显示对象:

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 视图中确定下一个url 服务器端
  • 将此网址作为响应的一部分返回
  • 当需要转换到下一张幻灯片时,在客户端使用 javascript 加载这个新 URL
    • 例如window.location.href = '://your_url';

【讨论】:

  • 啊,我在输入问题时忘记传递 show_number 参数。我将解决这个问题,看看我是否想出任何办法。非常感谢!
  • @Marvin 如果我的回答帮助您解决了问题,您可以点赞并接受。如果您对此仍有疑问,我很乐意继续提供帮助。
猜你喜欢
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 2021-01-05
  • 2013-11-17
相关资源
最近更新 更多