如何在Django中将变量从模板传递到视图

时间:2019-05-14 16:07:11

标签: django

我无法从模板获取变量到另一个视图。

我有一张带有一些记录的表。每行都有一个按钮,我想单击它并检索另一页中有关记录的更多详细信息。我一直在网上寻找,但无法弄清楚该如何实施。我尝试过的一切都崩溃了,或者没有回报。

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 个答案:

答案 0 :(得分:4)

您可以直接在网址中传递值,例如: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})