javascript - 将数据从模板传递到 Django 中的 View

标签 javascript html django

我正在使用 Django 构建一个巴士预订网站。用户搜索特定路线上的公交车后,会显示一个列表,其中显示可用的公交车。每个列表项(即巴士)都有一个图书按钮,可通往名为“seats.html”的新页面。我想将公交车号码和其他信息传递给“座位” View ,以便我可以显示可用座位数,并且 JavaScript 也可以使用此信息。这是我的代码

views.py

def find_bus(request):
    form = forms.FormFindBus

    template = 'home.html'
    context = {'form': form}
    return render(request, template, context)



def select(request):

    bus_type = request.GET.get('bus_type')

    bus_from = request.GET.get('bus_from')

    bus_to = request.GET.get('bus_to')

    date_string = request.GET.get('date')

    qs = Bus.objects.filter(type_of_bus=bus_type, route__location_from=bus_from, route__location_to=bus_to, date=date_string)


    context = {'qs': qs,}
    template = 'select.html'
    return render(request, template, context)

def seats(request):
    template = 'seats.html'
    context = {}
    return render(request, template, context)

select.html

{% for info in qs %}

    <a href="{% url 'book:seats' %}">Book</a>
    <ul>
        <li><b>Bus Number -</b> {{ info.bus_number }}</li>
        <li><b>Route -</b> {{ info.route }}</li>
        <li><b>Date -</b> {{ info.date }}</li>
        <li><b>Time -</b>{{ info.time }}</li>
    </ul>
</div>

{% endfor %}

正如您所看到的,查询集在 select.html 中传递,我使用 for 循环来显示所有可用的总线及其信息。然后,我点击“预订”来预订我想要的巴士选择的座位。我希望当我单击“预订”时,巴士信息也会传递到下一个模板,即 Seats.html,以便我使用该信息来显示可用座位和其他相关信息。这里有一些屏幕截图,可以帮助你们获得更好的图片。

This is home page where user enter his query A list of buses available is displayed

Seats are displayed

正如您在第一张图片中看到的,用户输入了他的查询。然后,第二张图像中会显示公交车列表,或者在本例中仅显示一辆公交车。然后他点击该巴士上的预订,然后显示座位表。如何将信息从“select.html”模板传递到座位 View 。请不要建议使用 url 传递信息。它很容易导致操纵。

最佳答案

Please don't suggest to pass info using url. It can lead to manipulation very easily.

遗憾的是,将信息传递到 View 的所有其他方法都没有那么好或更安全。

Never ever trust user input.

无论你最终选择哪种方式,都必须验证输入。

使用 URL 有一些优点。例如:您可以将您刚刚找到的路线的链接发送给 friend (所谓的深层链接)。否则,您的 friend 将不得不亲自点击您的表单。

<小时/>

如果您仍然有兴趣通过 URL 执行此操作,您可以按如下方式执行此操作:

您可以更改名为 book:seats 的 URL 的 URL 架构,以包含所有必需的信息。假设 book:seaturls.py 中如下所示:

url(r'^book/seats/$', views.seats, name='book:seats')

您可以更改此 URL 模式以包含要传递到 seats View 的所有信息:

url(r'^book/seats/(?P<bus_number>\w+)/(?P<route>\w+)/(?P<date>\w+)/(?P<time>\w+)$', views.seats, name='book:seats')

这会将所谓的命名组添加到您的 URL 模式中。您可以在此处阅读有关命名组的信息:named groups documentation 。显然,您必须修改此示例 URL 模式以满足您的需要。

下一步是更新您的 View 函数以处理所有这些额外的 View 参数:

def seats(request, bus_number, route, date, time):
    template = 'seats.html'
    context = {}
    return render(request, template, context)

最后一步是修改在模板中呈现链接的方式:

<a href="{% url 'book:seats' info.bus_number info.route info.date info.time %}">Book</a>

您必须按照 seats 函数中使用的顺序添加参数。您可以在此处的官方文档中阅读有关此内容的更多信息:template tag documentation .

关于javascript - 将数据从模板传递到 Django 中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43686406/

相关文章:

javascript - 从 JS 到 css 控制 div 高度?

javascript - 隐藏/显示元素

python - 当我 pip 安装要求时,无限循环不兼容(Django1.99)

python - Win2003 上的 Outlook 2003 中的 Django EmailMultiAlternatives 和 HTML 电子邮件显示

javascript - 如何在 react 中获取对象中的嵌套数组?

javascript - 有没有办法将泛型类型限制为仅在 typescript 中的普通对象?

javascript - 下划线模板中未应用 jQuery 移动 css 样式

html - 滚动带有内容的固定标题

javascript - html 5 canvas javascript 下雨动画(如何高效轻松地实现!)

python - Django 从管理面板添加新条目