Маршрутизация AJAX к URL-адресам Django (с помощью URL-путей "path" Django 2.0) - PullRequest
0 голосов
/ 24 февраля 2019

Раньше это работало до того, как Django 2.0 изменил шаблоны URL-адресов с «url» на «path»:

index.html

<!DOCTYPE html>
  {% load static %}
  <head>
      <script type="text/javascript" src="{% static 'main/js/jquery-3.3.1.js' %}">
  </head>
  <body>
      <div id='test'>
        <p><button class="btn">Click Here!</button></p>
      </div>
  <script>
      $('.btn').click(function(){
      console.log('button is clicked!')
      $.ajax({
          url: 'main/all_json',
          sucess: function(serverResponse){
          console.log('success.serverResponse', serverResponse)
    }
  })  
});

URL-адреса уровня приложения.py

urlpatterns = [
  url(r'^all_json$',views.all_json, name="all_json")
  ]

Уровень проекта urls.py

app_name= "main"

urlpatterns = [
    path('', include ('apps.main.urls', namespace='main')),
    path('admin/', admin.site.urls),
]

views.py

def all_json(request):
    return HttpResponse ('hello world!')

Но теперь Django 2.0 использует "путь" вместо регулярного выражения URLшаблон.Когда я использую путь:

app_name= "name"

urlpatterns = [
path('all_json',views.all_json, name="all_json"),
]

я получаю:

GET http://127.0.0.1:8000/main/all_json 404 (не найдено)

Я посмотрелв новой документации и в заметках о выпуске и есть несколько ответов SO, объясняющих, как его использовать SO post 1 & SO post 2 ,Это было полезно до того момента, когда я не могу передать URL-адрес из функции AJAX в «путь».

Я новичок в AJAX, и я привык использовать {% url main:all_json %} в Django для своих действий.Но с AJAX я считаю, что не могу использовать эту запись.Это правильно?

И по некоторым причинам, у меня есть примеры, которые использовали url(r'^$') urlpatterns до того, как работал Django 2.0, но теперь я получаю код 404 при использовании 'пути'.Большинство доступных вопросов и учебных пособий до Django 2.0 и используют url(r'^$') urlpatterns.В заметках о выпуске и документации ничего не говорится о различиях в работе с AJAX.

У меня следующие вопросы:

Есть ли что-то еще, что мне нужно добавить в мой шаблон и / или urls.py, чтобы помочь ему найти URL-адреса (избавиться от 404)?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Постарайтесь сделать API понятными и полезными.Использование main, all_json имен неясно.Тем не менее, давайте попробуем на ваших примерах:

  1. В ваших urls.py используйте main/all_json/ и name="all_json".Согласно документации:

Нет необходимости добавлять косую черту, потому что это есть в каждом URL.Например, это статьи, а не / статьи. ссылка

... каждый шаблон требует, чтобы URL заканчивался косой чертой. ссылка

В вашем HTML-шаблоне (кстати, возможно, это ошибка, но вы назвали его html.py. Я советую изменить это на somename.html), в блоке js используйте шаблонный тег {% url "all_json"" %}, например:

$.ajax({
      url: '{% url "all_json" %}',
      sucess: function(serverResponse){
      console.log('success.serverResponse', serverResponse)
}

})

Используя шаблонный тег url, вы можете избежать многих ошибок при изменении URL.

0 голосов
/ 24 февраля 2019

Во-первых, url все еще отлично действует в Django 2.0.В более поздних версиях точно такая же функциональность доступна как re_path.

Однако проблема не в этом.Это то, что вы добавили последний косой черты в новую версию, где у вас не было раньше.Удалите его:

path('all_json', ...)

или, предпочтительно, добавьте его к вызову Ajax:

url: 'main/all_json/',

Наконец, обратите внимание, что, поскольку скрипт Ajax находится непосредственно в файле шаблона, абсолютно возможноиспользуйте тег {% url %} там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...