Как передать переменную из шаблона в представление в Django - PullRequest
0 голосов
/ 14 мая 2019

Я не могу получить переменную из шаблона в другое представление.

У меня есть таблица с некоторыми записями. В каждой строке есть кнопка, на которую я хотел бы нажать и получить более подробную информацию о записи на другой странице. Я искал онлайн, но я не могу понять, как я должен реализовать это. Все, что я пробовал, либо рухнуло, либо вернуло «Нет».

list.html

{% for trainee in trainees_list %}
          <tr>
            <td>{{ trainee.last_name }}</td>
            <td>{{ trainee.first_name }}</td>
            <td><a class="btn btn-primary" href="{% url 'traineedetails'%}" value="{{ trainee.pk }}" >View</a></td>
          </tr>
{% endfor %}

view.py

def traineedetails(request):
    if request.method == 'GET':
        trainee_details = request.POST.get('trainee.pk')
        print(trainee_details)
        return render(request, 'trainee_details.html')

def listoftrainees(request):
    trainees_list = UserTraining.objects.all()
    return render_to_response('list.html', {'trainees_list': trainees_list})

url.py

urlpatterns = [
    path('traineedetails', views.traineedetails, name='traineedetails'),
    path('listoftrainees', views.listoftrainees, name='listoftrainees'),
]

form.py

class UserTrainingForm(forms.ModelForm):

    scope_requirements = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=microscopes.MICROSCOPES)

    class Meta:
        model = UserTraining

        fields = (
        'first_name',
        'last_name',
        )

model.py

class UserTraining(models.Model):
    first_name = models.CharField('first name', max_length = 100)
    last_name = models.CharField('last name', max_length = 100)

Я бы хотел иметь возможность нажать на кнопку в строке таблицы и получить дополнительную информацию о записи.

1 Ответ

4 голосов
/ 14 мая 2019

Вы передаете значение непосредственно в URL, как: traineedetails/<pk>

В шаблоне:

{% for trainee in trainees_list %}
          <tr>
            <td>{{ trainee.last_name }}</td>
            <td>{{ trainee.first_name }}</td>
            <td><a class="btn btn-primary" href="{% url 'traineedetails' trainee.pk%}">View</a></td>
          </tr>
{% endfor %}

Отредактируйте ваш urls.py:

path('traineedetails/<pk>', views.traineedetails, name='traineedetails'),

Затем вы можете получить его в своем представлении следующим образом:

from django.shortcuts import get_object_or_404
def traineedetails(request, pk):
    if request.method == 'GET':
        #try to get your objet or throw a 404 error
        trainee = get_object_or_404(UserTraining, pk=pk)
        #pass it back to the template
        return render(request, 'trainee_details.html',{'trainee':trainee})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...