一个 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.pyviews.py 中包含/subscribe/

【问题讨论】:

你能显示error code和主要urls.py 错误代码是404,因为/subscribe/ 仅在app1 中定义,但我也从app2app3 调用它。我在我的 AJAX 代码中尝试了url : % url 'app1:subscribe' %,但没有成功。 【参考方案1】:

我不完全理解您的问题。您想在 app2 中的 app1 中使用相同的 url 吗?如果这是您的要求,据我所知,这样的事情是不可能的,因为相关的视图函数连接到 urls.py 文件中的每个 url。

-- 已更新--

据我了解,您希望使 AJAX 代码中的 URL 字段动态化。这就是我解决这个问题的方法。我要么向表单标签添加一个属性,要么在表单字段中添加一个隐藏的输入字段,并将视图函数中的相关 url 带到与上下文相关的 html 文件中,并将其添加到我指定的字段之一,最后,我通过javascript取相关属性或输入字段的值,赋值给AJAX代码的url信息。

【讨论】:

我希望我的 AJAX 代码将表单提交到 /subscribe/ URL 和 app1 的视图,即使它是从 app2app3 调用的。 据我了解,您希望使 AJAX 代码中的 URL 字段动态化。这就是我解决这个问题的方法。我要么向表单标签添加一个属性,要么在表单字段中添加一个隐藏的输入字段,并将视图函数中的相关 url 带到与上下文相关的 html 文件中,并将其添加到我指定的字段之一,最后,我通过javascript获取相关属性或输入字段的值,并将其分配给AJAX代码的url信息。 . 谢谢。请使用此解决方案更新您的答案,以便我接受。 好的,我做到了。 @OmidShojaee

以上是关于一个 Django 视图和 url,多个应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Django 创建多个 URL,为 POST 和 GET 调用相同的视图

python Django 多个视图url出错

Django 视图层说明

在 Django 中过滤 Queryset 并设计正确的 urls.py 和模板

Django url 模式不是注册的视图函数或模式

Django 2+ 中的多个可选 URL 参数