【问题标题】:Django ajax wouldn't work when in separate fileDjango ajax 在单独的文件中不起作用
【发布时间】:2017-11-01 16:17:12
【问题描述】:

我有使用 ajax 的 django 站点。当我在 html 文档 <script>...</script> 中使用 javascript 时,一切正常。但是当我移动 javascript 来分隔文件时,一切(所有 javascript)都很好,但是 ajax。在我收到的每个 ajax 请求上:404 (Not Found) 它总是显示 ajax 开始的文档行。我的网址是这样的:

url(r'^(?P<letnik_id>[1-4])/(?P<classes_id>[A-G])/(?P<subject_id>[\w\-]+)/dodaj$', views.create_exam, name="create_exam"),

在视图中:

def create_exam(request, letnik_id, classes_id, subject_id):
...

和 ajax 网址:

$.ajax({
    url: "{% url 'create_exam' letnik_id=letnik_id classes_id=classes_id subject_id=subject_id %}",
...

如果在单独的文件中 {% url 'create_exam' letnik_id=letnik_id classes_id=classes_id subject_id=subject_id %} 可能不起作用?但是还有其他方法可以指向 url 吗? 我做错了什么?

【问题讨论】:

    标签: javascript ajax django post


    【解决方案1】:

    怎么了:

    您正在尝试在模板之外使用 Django 模板标签 ({% url ... %})。

    修复它:

    您可以执行一些操作,例如将一堆数据转储到 HTML 中,并将其附加到浏览器中的窗口对象

    <script>
    window.page_data = {
      someUrl: {% url ... %}
    };
    </script>
    

    然后使用您的其他脚本,从窗口访问数据...

    $.ajax(window.page_data.someUrl)
    

    或者,您可以使用数据属性将 URL 嵌入到标记中

    <div data-url="{% url ... %}">
    

    然后从 Javascript 中的元素中提取出来。

    随着您的项目变得越来越复杂,您的 API 应该传递对资源执行每个操作所需的数据。请注意不要将您的客户端与您的服务器进行不必要的耦合。也就是说,不要对 url 进行硬编码,因为它们可能会更改,这会导致一些意外的损坏。如果您必须对任何内容进行硬编码,请确保只在一个地方进行,并在某处做笔记以在某个时候修复它。

    【讨论】:

      【解决方案2】:

      您回答了自己的问题。在单独的 JS 文件中,django 模板标签将不起作用。它仅适用于 Django 视图呈现的模板。您可能需要另辟蹊径。

      我不确定这是否是最好的方法,但您可以在模板中使用 url 声明一个全局 js 变量,然后在您的 js 文件中使用它。我真的不知道这是否是最好的方法,但我认为它会起作用。

      在你的 html 中,在你声明变量之前导入 js 文件:

      MY_URL = "{% url 'create_exam' letnik_id=letnik_id classes_id=classes_id subject_id=subject_id %}";
      <script src="myscripts.js"></script>
      

      【讨论】:

      • 这不是一个坏主意,虽然我已经解决了这个问题,但是两天都解决不了。我刚刚使用:window.location.pathname + "create_exam",因为所有参数都已经在 url 中。无论如何,谢谢!
      猜你喜欢
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      相关资源
      最近更新 更多