【问题标题】:One Django view and url, multiple apps一个 Django 视图和 url,多个应用程序
【发布时间】: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' %},但没有成功。

标签: django ajax django-views django-urls


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
相关资源
最近更新 更多