将 Django 中的视图/模型链接到 Javascript 前端框架

Posted

技术标签:

【中文标题】将 Django 中的视图/模型链接到 Javascript 前端框架【英文标题】:Linking the View / Model in Django to a Javascript Front End Framework 【发布时间】:2016-11-01 07:42:33 【问题描述】:

我精通 javascript 和 python,并且通常熟悉 django,但对其中一些 javascript 前端框架非常陌生。

对于以下情况我应该使用哪种工具有点困惑:

用户有一个包含多个因素的搜索查询,但我希望在查询之后可以调整这些因素(即价格滑块)。

理想情况下,新结果(来自 django 视图中的查询集过滤器)无需刷新即可呈现。

另一种场景是经典的 ajax,无需刷新即可提交表单。

我正在考虑所有主要的库(jquery、react)以及框架(backbone、angular、ember)。

所有这些都可以完成我给出的示例吗?这称为什么类型的过程(数据绑定?),我在哪里可以找到一些关于将 django 与任何框架/库连接起来的好教程。

在此先感谢您的任何意见。

【问题讨论】:

您绝对可以只使用 jQuery 来完成此操作,尽管使用更强大的 javascript 框架(如 Angular 或 React)可能会更简洁。您打算在您的网站上做更多类似的功能,还是只做这个? 目前,我只关心搜索过滤器和表单提交。稍后我可能会添加一些额外的功能。如何使用 jQuery/React/Angular 完成搜索功能? 让我在答案中提出一些建议。 【参考方案1】:

因此,我建议以下内容并考虑您的价格滑块示例。这是一个如何仅使用 jQuery 按名称搜索用户的示例。

显然,您需要一个用于搜索查询的输入表单。

<form class="search-form">
    <input type="text" name="search" placeholder="Search.." id="search-name">
    <button class="search-submit">Go!</button>
    <!-- toggleable search options here, including your price slider. -->
</form>

随心所欲地自定义它的外观。这里重要的是用户将在搜索框中输入文本,然后单击“Go!”。您需要将 jQuery 事件附加到此操作,作为表单提交,因为这会重新加载您不想要的页面。

$(".search-submit").click(function() 
    var url = "/search?name=" + $("#search-name").val();
    $.ajax(
        method: "GET",
        url: url,
        success: function (data) 
            // Dynamically change your page results with more jquery based on data
        ,
        error: function (err) 
            alert("Something went wrong");
        
    );
);

接下来,你需要一个 URL 和 View 来接受这个 ajax 请求。

urls.py:

from views.py import search
# Search URL
url((r'^search/$', search),

views.py:

import json
from app.models import User
from django.http import HttpRespons

def search(request):
    # Grab the data
    query = request.GET.get("name", None)
    # Make the query using your backend, the following is just an example
    users = User.objects.filter(name=name)
    # Serialize the objects as necessary
    data = []
    for user in users:
        data.append(
            "name" : user.name,
            "age" : user.age,
            # Other stuff you want from the objects you retrieved.
        )
    return HttpResponse(json.dumps(data))

这样就结束了循环。当用户输入搜索查询时,ajax 会调用你的资源,得到新的结果,页面的动态变化交给你。

要做的事情: - 获取查询时某种加载“掩码”。可以用jquery和CSS来完成 - 额外的搜索选项。最好在您向服务器发出的请求中添加更多查询字符串。例如,“/search?name=Jack&age=42”。

【讨论】:

谢谢,这就是我要找的!出于好奇,在什么时候实施骨干/角度或反应是有意义的?他们会为应用程序增加哪些功能? Angular 和其他 javascript 框架在功能方面比 jQuery 强大得多。在您真正理解它们之前,我不会添加它们,因为它们会为您构建站点的方式增加大量开销。我的建议是阅读它们并了解它们提供的功能,但请坚持当前的路径,直到您确信自己需要它们。

以上是关于将 Django 中的视图/模型链接到 Javascript 前端框架的主要内容,如果未能解决你的问题,请参考以下文章

如何将表单视图作为 django 中的上下文传递给另一个视图?

如何将我在视图中获得的一些信息保存到模型中的一个字段中 - django

将 django-rest-framework 中的超链接添加到 ModelViewSet

在 Django 的父管理视图中将子对象链接到父对象

添加自定义按钮以链接到另一个模型 Django Admin

Django - 将模型名称从 url 传递给视图