我一直都读到,当你在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>
我尝试了以下各种表达网址的方法,但没有一种方法可以使用:
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 at / profile / view / 1/5/1 /
反对&#39;会员列表&#39;参数&#39;()&#39;和关键字参数&#39; {u&#39;已查看&#39;:你&#39; 5&#39;,你&#39;已查看_类型&#39;:你&#39; 1&#39;,你&#39; viewer_id&# 39;:你&#39;}&#39;未找到。尝试了1种模式:[&#39; profile / view / member-lists /(?P \ d +)/(?P \ d +)/ $&#39;]
有什么我不了解Django的网址模式匹配吗?
解
我弄明白了这个问题。网址模式名称需要是&#34;成员列表检查&#34;而不是&#34;成员列表&#34;。
答案 0 :(得分:0)
就这样称呼它:
var url = "{% url 'member-lists' viewer_id=viewer_id viewer_type_id=viewer_type_id viewed_type_id=viewed_type_id %}";
无需使用双花括号。
BTW,请注意您没有通过viewed_type_id
,我不知道您的urls.py
是否需要这样做。如果不起作用,请发布您的urls.py