一个 Django 视图和 url,多个应用程序
One Django view and url, multiple apps
我在每一页的页脚处都有一个小的时事通讯注册表单。页脚是 base.html
.
的一部分
我使用 Ajax 提交表单。现在 Ajax 代码调用在 app1
中定义的视图,相应的 URL 在同一应用程序的 urls.py
中定义。
这是 AJAX 代码(此代码保存在单独的 js
文件中并包含在 base.html
中):
$('#newsletterForm').submit(function(e){
e.preventDefault()
$('#loader').css("display", "block")
$.ajax({
type : "POST",
url : "/subscribe/",
data : {
subscriber_email : $('#e-mail').val(),
csrfmiddlewaretoken : csrftoken,
datatype : "json",
},
success: function(){
$('#loader').css("display", "none"),
$('#subscribed').css("display", "block"),
$('#subscribed').delay(3000).fadeOut("slow")
},
failure: function(){
alert('An error has occurred. Please try again.')
},
});
});
视图(在 app1 中定义):
def subscribe(request):
if request.is_ajax():
subscriber = Subscriber(email=request.POST.get('subscriber_email'))
subscriber.save()
return JsonResponse({}, status=200)
else:
return redirect('homepage:index')
URL(在app1中定义):
path('subscribe/', views.subscribe, name='subscribe'),
现在,问题是当我在 app2
时,Django 在那个不存在的应用程序中寻找 /subscribe/
。
那么有没有办法通过在AJAX代码的url
中包含appname
来解决这个问题呢?或者我必须在每个应用程序的 urls.py
和 views.py
中包含 /subscribe/
?
我不完全明白你的问题。你想在 app2 中的 app1 中使用相同的 url 吗?如果这是你的要求,据我所知,这样的事情是不可能的,因为相关的视图函数连接到 urls.py 文件中的每个 url。
-- 已更新 --
据我了解,您想使 AJAX 代码中的 URL 字段动态化。这就是我解决这个问题的方法。我要么在表单标签中添加一个属性,要么在表单字段中添加一个隐藏的输入字段,并将视图函数中的相关 url 带到与上下文相关的 html 文件中,并将其添加到其中一个我指定的字段,最后,我通过javascript取相关属性或输入字段的值赋给AJAX代码的url信息
我在每一页的页脚处都有一个小的时事通讯注册表单。页脚是 base.html
.
我使用 Ajax 提交表单。现在 Ajax 代码调用在 app1
中定义的视图,相应的 URL 在同一应用程序的 urls.py
中定义。
这是 AJAX 代码(此代码保存在单独的 js
文件中并包含在 base.html
中):
$('#newsletterForm').submit(function(e){
e.preventDefault()
$('#loader').css("display", "block")
$.ajax({
type : "POST",
url : "/subscribe/",
data : {
subscriber_email : $('#e-mail').val(),
csrfmiddlewaretoken : csrftoken,
datatype : "json",
},
success: function(){
$('#loader').css("display", "none"),
$('#subscribed').css("display", "block"),
$('#subscribed').delay(3000).fadeOut("slow")
},
failure: function(){
alert('An error has occurred. Please try again.')
},
});
});
视图(在 app1 中定义):
def subscribe(request):
if request.is_ajax():
subscriber = Subscriber(email=request.POST.get('subscriber_email'))
subscriber.save()
return JsonResponse({}, status=200)
else:
return redirect('homepage:index')
URL(在app1中定义):
path('subscribe/', views.subscribe, name='subscribe'),
现在,问题是当我在 app2
时,Django 在那个不存在的应用程序中寻找 /subscribe/
。
那么有没有办法通过在AJAX代码的url
中包含appname
来解决这个问题呢?或者我必须在每个应用程序的 urls.py
和 views.py
中包含 /subscribe/
?
我不完全明白你的问题。你想在 app2 中的 app1 中使用相同的 url 吗?如果这是你的要求,据我所知,这样的事情是不可能的,因为相关的视图函数连接到 urls.py 文件中的每个 url。
-- 已更新 --
据我了解,您想使 AJAX 代码中的 URL 字段动态化。这就是我解决这个问题的方法。我要么在表单标签中添加一个属性,要么在表单字段中添加一个隐藏的输入字段,并将视图函数中的相关 url 带到与上下文相关的 html 文件中,并将其添加到其中一个我指定的字段,最后,我通过javascript取相关属性或输入字段的值赋给AJAX代码的url信息