将ajax请求移动到不同的应用程序后,Django方法不允许出现错误



我的django应用程序中有一个名为home的小表单,我通过jquery ajax请求提交。下面是我有的设置

主页urls.py

from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^submitseries/$', views.submitseries, name='submitseries'),
url(r'^getstats/$', views.getstats, name='getstats'),
]

主页视图.py

def submitseries(request,id=None):
if request.method == "POST":
series_url = request.POST.get("series_url")
# rest of the processing code that is working fine

应用程序urls.py

from django.contrib import admin
from django.urls import include,path
urlpatterns = [
path('', include(('home.urls','home'),namespace="home")),
path('series/', include(('series.urls','series'),namespace="series")),
path('submitseries/', include(('home.urls','submitseries'),namespace="submitseries")),
path('players/', include(('players.urls','players'),namespace="players")),
path('admin/', admin.site.urls),
]

这个设置运行良好,但我想将这个ajax请求移动到我的应用程序中的另一个应用程序,该应用程序的名称为series

因此,我已将子功能系列移到视图。系列应用程序的py修改了

系列urls.py

from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^$submitseries/', views.submitseries, name='submitseries'),
]

((尝试了不同的变体,如系列/子系列/))

应用程序urls.py修改为以下

from django.contrib import admin
from django.urls import include,path
urlpatterns = [
path('', include(('home.urls','home'),namespace="home")),
path('series/', include(('series.urls','series'),namespace="series")),
path('submitseries/', include(('series.urls','submitseries'),namespace="submitseries")),
path('players/', include(('players.urls','players'),namespace="players")),
path('admin/', admin.site.urls),
]

而不是指向home.urls我已将其指向series.url

但它开始给出405方法不允许的错误,无论我尝试什么,我都无法解决它。

我尝试在应用程序和系列应用程序的urls.py中给出不同的路径变体。我就是做不到。这两种设置的唯一不同之处在于,家庭应用程序是基本的,相对路径是"strong";http://localhost:8000/submitseries"但当我将其移动到系列应用程序时,基本url变为";http://localhost:8000/series/submitseries">

根据请求添加AJAX代码

//function to submit series url and save to DB
$("#save_series").click(function(e){
e.preventDefault();
series_url = $("#series_url").val();
var csrftoken = $("[name=csrfmiddlewaretoken]").val();
console.log("Series URL " + series_url);
$.ajax({
type: "POST",
url: "series/submitseries/",
data: {"series_url":series_url},
headers:{
"X-CSRFToken": csrftoken
},
success: function(result){
message = "Series #" + result["series_id"] + " inserted successfully";
bootstrap_alert['info'](message);
},
error: function(result){
bootstrap_alert['warning'](result.responseJSON.error_msg);

}
});//end of ajax submit
});//end of button click block

由于用户在评论中指出了不同的东西,我能够解决这个问题。

第一条线索是@amadou sow建议使用以下表达式在JS中使用url替换

{% url 'submitseries:submitseries' %}

当我在表单的动作属性中这样做时,我开始得到以下错误

"未找到任何参数的"submitseries"的反转。1个图案已尝试:['sseries/submitseries/$submitseries/']

这表明我在系列urls.py中提供的端点有问题

在玩了一些排列和组合后,我发现$是按字面计算的,而不是子目录情况下的regex符号,@BrianD关于$在正确位置的评论一针见血。

最后,将系列urls.py更改为以下内容,使整个正常工作

urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^submitseries/', views.submitseries, name='submitseries'),
]

p.S.子机系列前面没有$

最新更新