Django - ошибка "метод не разрешен" после перемещения ajax-запроса в другое приложение

В моем приложении django есть небольшая форма home, которую я отправляю через jquery ajax запрос. Ниже приведена установка, которая у меня есть

home 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'),
]

home views.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

application 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

Итак, я перенес функцию submitseries в views.py из приложения series app, модифицировав

series 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'),
]

((пробовал разные варианты, такие как series/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 Method not allowed error и не важно, что я пытаюсь сделать, я не могу решить эту проблему.

Я пробовал задавать различные варианты пути в urls.py как приложения, так и приложения серии. Я просто не могу заставить его работать. Единственное различие в обеих установках заключается в том, что домашнее приложение является базовым, а относительный путь "http://localhost:8000/submitseries". но когда я перемещаю его в приложение series, базовый 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 использовать подстановку url в JS, используя следующее выражение

{% url 'submitseries:submitseries' %}

Когда я сделал это в атрибуте action формы, я начал получать следующую ошибку

"Reverse for 'submitseries' with no arguments not found. 1 шаблон(ы) tried: ['series/submitseries/$submitseries/']

.

Это дало понять, что что-то не так с конечной точкой, которую я указал в series urls.py

После игры с некоторыми перестановками и комбинациями я обнаружил, что $ оценивается буквально, а не как символ regex в случае подкаталога, и комментарий @BrianD о том, что $ находится в правильном месте, попал в точку.

Наконец, изменив серию urls.py на следующую, все заработало

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

P.S. submitseries - без $ впереди.

Вернуться на верх