Django выше версии 2.1.5: как установить urls.py, чтобы метод get работал? - PullRequest
0 голосов
/ 10 января 2019

Я хочу использовать тот же шаблон "createchapter.html". Другими словами, я хочу сделать ссылку на «createchapter /? Step = 1.html», «createchapter /? Step = 2.html», «createchapter /? Step = 3.html».

Я использую Django 2.1.5, поэтому у меня мало ресурсов или вопросов и ответов для изучения.

В urls.py

urlpatterns = [
(.....)
    url(r'^createbook/$',viewsSentence.createbook),
    url(r'^createchapter/<int:step>$',viewsSentence.createchapter),

]

В views.py

@csrf_exempt
    @csrf_protect
def createchapter(request,path):


   if request is not None:
      if request.GET.get('step') is None:
         context1 = {
            'books': book.objects.order_by('titleOrigin'),
            'step': 1,
         }

         #useless: return HttpResponse('/?step=1',context1)
         redirect("createchapter.html",context1,step=1)

      elif request.GET.get('step') == 2:
         context2 = {
            'step': 2,
         }
         redirect("createchapter.html", context2,step=2) 

В createchapter.html

{% if step == 1 %}
      <form>
          {% csrf_token %}
        <div class="form-group">
           <i class="fas fa-forward"></i>
          <label for="select-books">Step 1: select a book</label>
          <select class="form-control" id="select-books">
                {% for book in books %}
                <option value="{{ book.id }}">{{ book.titleOrigin }}</option>
                {% endfor %}

          </select>
        </div>
      </form>
        <div class="d-flex justify-content-center">
                <i class="fas fa-arrow-alt-circle-right"><a id="createchapter-step2">Step 2</a></i>
        </div>
    {% elif step == 2%}
    <div class="form-group">
           <i class="fas fa-forward"></i>
          <label>Step 2: set numbers of chapters</label>
    </div>
    {% endif %}

Вот как я вызываю вторую страницу (я использую ajax):

 $("#createchapter-step2").click(function(){

        var selectedbookId = $("#select-books option:selected").val();

        $.ajax({
            url: '/createchapter/?step=2',
            type:'get',
            data:{
                'selectedbookId':selectedbookId,
                csrfmiddlewaretoken: $( "#csrfmiddlewaretoken" ).val(),
            },
        });
    });

Сообщение об ошибке:

    Page not found (404)
    Request Method:   GET
    Request URL:  http://127.0.0.1:8000/createchapter/?step=1/

Ответы [ 2 ]

0 голосов
/ 10 января 2019

На самом деле вы используете строку запроса URL в http://127.0.0.1:8000/createchapter/?step=1. Вам не нужно определять его в URL (часть step ). Так и должно быть:

url(r'^createchapter/$',viewsSentence.createchapter),

Затем, чтобы получить параметры строки запроса url, вы можете попробовать так:

from django.shortcuts import render


@csrf_exempt
@csrf_protect
def createchapter(request):
   step = request.GET.get('step')  # it will fetch the step from url

   if step == "2":
     context = {
        'step': 2,
     }

   else:
     context = {
        'books': book.objects.all().order_by('titleOrigin'),
        'step': 1,
     }

   return render(request, "createchapter.html",context)
0 голосов
/ 10 января 2019

Вы ввели неправильный URL, он должен быть как http://127.0.0.1:8000/createchapter/1/

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