首页 > 解决方案 > 如何将变量从模板传递到Django中的视图

问题描述

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

我有一张有一些记录的表。每行都有一个按钮,我想单击该按钮并在另一页中检索有关记录的更多详细信息。我一直在网上寻找,但我无法弄清楚我应该如何实现这一点。我尝试过的所有东西要么崩溃,要么返回 None。

列表.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 %}

视图.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})

网址.py

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

表格.py

class UserTrainingForm(forms.ModelForm):

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

    class Meta:
        model = UserTraining

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

模型.py

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

我希望能够单击表格行中的按钮并检索有关记录的更多信息。

标签: django

解决方案


您直接在 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})

推荐阅读