【发布时间】: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