2 похожих представления и шаблоны, но только один шаблон показывает параметры формы - PullRequest
0 голосов
/ 30 сентября 2018

Я действительно застрял на этом.У меня есть рабочий вид / шаблон с опцией выбора формы, которая заполняет параметры из моей модели

views.py

def random(request):
    classroom = Classroom.objects.filter(teacher=request.user).order_by('course_block')
    classblock = request.GET.get('class_block')
    students = Student.objects.all().filter(classroom__course_block=classblock)
    nicknames = [s.nickname for s in students]
    data = serializers.serialize("json", students, fields = ("nickname", "attend"))
    student_names = json.dumps(list(nicknames))
    context = {'students': students}
    context['classroom'] = classroom
    context['student_names'] = student_names
    context['data'] = data
    template = loader.get_template('randomizer/randomize.html')
    print (data)
    return render(request, 'randomizer/randomize.html', context)

ramdomize template

{% extends 'randomizer/base.html' %}
{% load static %}

{% block body %}
   <div id="djangorandom">
   {{ classroom.id }}
      <form action="{% url 'randomizer:random' %}" method="get">
           {% csrf_token %}
           <div class="form-group">
               <select class="form-control" name="class_block">
                   {% for room in classroom %}
                       <option value={{ room.course_block }}>{{ room.get_course_block_display }}</option>
                   {% endfor %}
               </select>
            </div>
           <span><input class="btn btn-default" type="submit" value="Submit"></span>
       </form>
   </div>


Page source returns:

<div class="form-group">
    <select class="form-control" name="class_block">

            <option value=11>Block 1-1</option>

            <option value=13>Block 1-3</option>

            <option value=14>Block 1-4</option>

            <option value=P13>Pair 1-3</option>

    </select>
</div>

Теперь я скопировал большую часть этого кода для немного другого шаблона и цели:

def pair(request):
    classroom = Classroom.objects.filter(teacher=request.user).order_by('course_block')
    classblock = request.GET.get('class_block')
    students = Student.objects.all().filter(classroom__course_block=classblock)
    nicknames = [s.nickname for s in students]
    data = serializers.serialize("json", students, fields = ("nickname", "attend"))
    student_names = json.dumps(list(nicknames))
    context= {'classroom': classroom}
    context['students'] = students
    context['student_names'] = student_names
    context['data'] = data
    template = loader.get_template('randomizer/pairing.html')
    print(data)
    return render(request, 'randomizer/pairing.html')


{% extends 'randomizer/base.html' %}
{% load static %}

{% block body %}
    <div id="djangorandom">
    {{ classroom.id }}
        <form action="{% url 'randomizer:pair' %}" method="get">
          {% csrf_token %}
          <div class="form-group">
            <select class="form-control" name="class_block">
              {% for room in classroom %}
                <option value={{ room.course_block }}>{{ room.get_course_block_display }}</option>
              {% endfor %}
            </select>
          </div>
          <span><input class="btn btn-default" type="submit" value="Submit"></span>
        </form>
    </div>        

Но в источнике страницы не отображаются какие-либо параметры выбора формы:

<form action="/randomizer/pairing/" method="get">
    <input type='hidden' name='csrfmiddlewaretoken' value='ADVUsnTserljrnDvRlmeTPyvjMOzva5xj7t8LSeDmPxnkBUtx4XmfXAI5aRfJky6' />
    <div class="form-group">
        <select class="form-control" name="class_block">

        </select>
    </div>
    <span><input class="btn btn-default" type="submit" value="Submit"></span>
</form>

Я практически скопировал все, начиная с первого представления / шаблона и заканчивая вторым представлением / шаблоном.Я задавался вопросом, была ли проблема с областью действия, когда def pair повторно использует код из def random, но я прокомментировал def random, и это не помогло.

1 Ответ

0 голосов
/ 30 сентября 2018

Ваше второе представление не передает контекст в вызов render(), поэтому в шаблоне нет переменной classroom и нечего перебирать.

(Обратите внимание, что в обоих представлениях template = loader.get_template(...) вызов не имеет значения и не используется; вы должны удалить эти строки.)

...