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

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

-- 已更新 --

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