一个 Django 视图和 url,多个应用程序
Posted
技术标签:
【中文标题】一个 Django 视图和 url,多个应用程序【英文标题】:One Django view and url, multiple apps 【发布时间】:2021-10-01 05:00:59 【问题描述】:我在每一页的页脚都有一个小型时事通讯注册表单。页脚是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/
?
【问题讨论】:
你能显示error code
和主要urls.py
错误代码是404
,因为/subscribe/
仅在app1
中定义,但我也从app2
和app3
调用它。我在我的 AJAX 代码中尝试了url : % url 'app1:subscribe' %
,但没有成功。
【参考方案1】:
我不完全理解您的问题。您想在 app2 中的 app1 中使用相同的 url 吗?如果这是您的要求,据我所知,这样的事情是不可能的,因为相关的视图函数连接到 urls.py 文件中的每个 url。
-- 已更新--
据我了解,您希望使 AJAX 代码中的 URL 字段动态化。这就是我解决这个问题的方法。我要么向表单标签添加一个属性,要么在表单字段中添加一个隐藏的输入字段,并将视图函数中的相关 url 带到与上下文相关的 html 文件中,并将其添加到我指定的字段之一,最后,我通过javascript取相关属性或输入字段的值,赋值给AJAX代码的url信息。
【讨论】:
我希望我的 AJAX 代码将表单提交到/subscribe/
URL 和 app1
的视图,即使它是从 app2
或 app3
调用的。
据我了解,您希望使 AJAX 代码中的 URL 字段动态化。这就是我解决这个问题的方法。我要么向表单标签添加一个属性,要么在表单字段中添加一个隐藏的输入字段,并将视图函数中的相关 url 带到与上下文相关的 html 文件中,并将其添加到我指定的字段之一,最后,我通过javascript获取相关属性或输入字段的值,并将其分配给AJAX代码的url信息。 .
谢谢。请使用此解决方案更新您的答案,以便我接受。
好的,我做到了。 @OmidShojaee以上是关于一个 Django 视图和 url,多个应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Django 创建多个 URL,为 POST 和 GET 调用相同的视图