【问题标题】:How to write Django URL in template when using jQuery Ajax?使用 jQuery Ajax 时如何在模板中编写 Django URL?
【发布时间】:2018-08-28 08:06:35
【问题描述】:

我一直读到,当你在 Django 中编码时,你应该遵循DRY principle 并且只在一个地方硬编码你的 URL,通常是 urls.py 文件。但是,如果要将 URL 传递给 jQuery Ajax 函数,如何在 Django 模板中编写 URL?我读过的每篇关于在 Django 模板中使用 Ajax 的在线文章都将 URL 显示为硬编码。

在我的例子中,模板使用 Bootstrap 在用户按下按钮时显示模式窗口。我的 profile.html 模板包含以下 jQuery 代码:

<html>
    # ...
    <script>
      $(function() {
        var url = '/profile/view/member-lists/{{ viewer_id }}/{{ viewed_id }}/{{ viewed_type_id }}';
        $('#exampleModal').on('show.bs.modal', function(e) {
          $.ajax(url, {
            url: url,
            type: 'GET',
            dataType: 'json',
            success: function(data) {
              // Do something
            },
            error: function(data) {
              // Raise error
            },
          });
        });
      });
    </script>
</html>

我尝试了以下各种表达 URL 的方法,但都没有奏效:

  var url = "{% url 'member-lists' {{ viewer_id }} {{ viewer_type_id }} %}";
  var url = "{% url 'member-lists' viewer_id={{ viewer_id }} viewer_type_id={{ viewer_type_id }} %}";
  var url = "{% url 'member-lists' %}?viewer_id={{ viewer_id }}&viewer_type_id={{ viewer_type_id }}";

当 URL 传递给 jQuery Ajax 函数时,在 Django 模板中表达 URL 的正确方法是什么?

更新

我将我的 JavaScript 网址更改为:

    var url = "{% url 'member-lists' viewer_id=viewer_id viewed_id=viewed_id viewed_type_id=viewed_type_id %}";

我的 urls.py 文件包含这些到 urlconf 模式:

url(r'^view/member-lists/(?P<viewer_id>\d+)/(?P<viewed_type_id>\d+)/$', get_viewer_member_lists, name='member-lists'),
url(r'^view/member-lists/(?P<viewer_id>\d+)/(?P<viewed_id>\d+)/(?P<viewed_type_id>\d+)/$', get_viewer_member_lists_checked, name='member-lists-checked'),

我正在输入这个网址:

http://localhost:8000/profile/view/1/5/1/

但现在我收到如下所示的错误。我认为我的 URL 将与上面显示的第二个 url 模式匹配。

NoReverseMatch 位于 /profile/view/1/5/1/

使用参数 '()' 和关键字参数 '{u'viewed_id': u'5', u'viewed_type_id': u'1', u'viewer_id': u'1' }' 未找到。尝试了 1 种模式:['profile/view/member-lists/(?P\d+)/(?P\d+)/$']

关于 Django 的 url 模式匹配,我有什么不明白的地方吗?

解决方案

我发现了问题所在。 url 模式名称需要是“member-lists-checked”而不是“member-lists”。

【问题讨论】:

    标签: jquery ajax django django-templates


    【解决方案1】:

    只要这样称呼它:

    var url = "{% url 'member-lists' viewer_id=viewer_id  viewer_type_id=viewer_type_id viewed_type_id=viewed_type_id %}";
    

    不需要使用双花括号。

    顺便说一句,请注意您没有通过viewed_type_id,我不知道您的urls.py 是否需要这样做。如果它不起作用,请发布您的urls.py

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 2021-12-11
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      • 2016-03-30
      • 2012-02-15
      • 2014-04-23
      • 2018-11-25
      相关资源
      最近更新 更多