无法使用 url 中的 /<int:pk>/ 访问我在视图中的模型字段
Fail to access my Model fields in the views using /<int:pk>/ in the urls
我有一个名为 Primary 的模型,我想访问我的 viewStudent 模板中的模型字段,因为我在模型中有更多字段。
模特:
class Primary(models.Model):
profilePicture = models.ImageField(blank=False, null=False)
firstName = models.CharField(max_length=25, blank=False, null=False)
sureName = models.CharField(max_length=25, blank=False, null=False)
lastName = models.CharField(max_length=25, blank=False, null=False)
address = models.CharField(max_length=50, blank=False, null=False)
classOf = models.CharField(max_length=20, blank=False, null=False)
yearOfGraduations = models.CharField(max_length=20, blank=False, null=False)
hobbies = models.TextField(blank=False, null=False)
dateOfBirth = models.CharField(max_length=20)
year = models.ForeignKey(Album, on_delete=models.CASCADE)
当我在我的 viewAlbum 模板中键入此内容时,它会抛出如下错误:NoReverseMatch at /viewAlbum Reverse for 'view-Student' with arguments '('',)' not found。尝试了 1 种模式:['view/(?P[0-9]+)/\Z']
<a href="{% url 'view-Student' primaries.id %}">view Students</a>
urls.py
path('viewAlbum', views.viewAlbum, name='view-Album'),
path('view/<int:pk>/', views.viewStudent, name='view-Student'),
浏览量:
def viewAlbum(request):
primaries = Primary.objects.all()
return render(request, 'viewAlbum.html', {'primaries': primaries})
def viewStudent(request, pk):
post = get_object_or_404(Primary, id=pk)
primaries = Primary.objects.get(id=pk)
return render(request, 'viewStudent.html', {'post': post, 'primaries': primaries})
在我的 viewAlbum 模板中,我试过这个:
<a href="{% url 'view-Student' primaries.pk %}">view Students</a>
viewAlbum 模板:
<div class="container">
<div class="row justify-content-center">
{% for prima in primaries %}
<div class="col">
<div class="card my-2" style="width: 18rem;">
<img src="{{ prima.profilePicture.url }}" alt="" class="card-img-top">
<div class="card-body">
<p>{{ prima.firstName }}</p>
<br>
<a href="{% url 'view-Student' prima.pk %}">view Students</a>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
viewStudents 模板:
<div class="container">
<div class="row justify-content-center">
<div class="card">
<div class="card-body">
<div class="row justify-content-center">
<img src="{{ prima.profilePicture.url }}" alt="" class="card-img-top">
<p>{{ prima.firstName }}</p>
</div>
</div>
</div>
</div>
</div>
但它不起作用
我该如何解决这个问题?
在您看来,
def viewAlbum(request):
primaries = Primary.objects.all() # RETURNS ALL
return render(request, 'viewAlbum.html', {'primaries': primaries})
primaries 没有 pk,因为它是一个查询集。
也许你的意思是遍历所有主要对象,像这样?
{% for p in primaries %}
<a href="{% url 'view-Student' p.pk %}">view Student</a>
{% endfor %}
编辑
您通过视图传递的名称必须与您在模板中使用的名称相匹配。由于您在模板中使用了名称 prima
,因此这就是您必须在视图中传递的名称:
def viewStudent(request, pk):
post = get_object_or_404(Primary, id=pk)
prima = Primary.objects.get(id=pk)
return render(request, 'viewStudent.html', {'post': post, 'prima': prima})
我有一个名为 Primary 的模型,我想访问我的 viewStudent 模板中的模型字段,因为我在模型中有更多字段。
模特:
class Primary(models.Model):
profilePicture = models.ImageField(blank=False, null=False)
firstName = models.CharField(max_length=25, blank=False, null=False)
sureName = models.CharField(max_length=25, blank=False, null=False)
lastName = models.CharField(max_length=25, blank=False, null=False)
address = models.CharField(max_length=50, blank=False, null=False)
classOf = models.CharField(max_length=20, blank=False, null=False)
yearOfGraduations = models.CharField(max_length=20, blank=False, null=False)
hobbies = models.TextField(blank=False, null=False)
dateOfBirth = models.CharField(max_length=20)
year = models.ForeignKey(Album, on_delete=models.CASCADE)
当我在我的 viewAlbum 模板中键入此内容时,它会抛出如下错误:NoReverseMatch at /viewAlbum Reverse for 'view-Student' with arguments '('',)' not found。尝试了 1 种模式:['view/(?P[0-9]+)/\Z']
<a href="{% url 'view-Student' primaries.id %}">view Students</a>
urls.py
path('viewAlbum', views.viewAlbum, name='view-Album'),
path('view/<int:pk>/', views.viewStudent, name='view-Student'),
浏览量:
def viewAlbum(request):
primaries = Primary.objects.all()
return render(request, 'viewAlbum.html', {'primaries': primaries})
def viewStudent(request, pk):
post = get_object_or_404(Primary, id=pk)
primaries = Primary.objects.get(id=pk)
return render(request, 'viewStudent.html', {'post': post, 'primaries': primaries})
在我的 viewAlbum 模板中,我试过这个:
<a href="{% url 'view-Student' primaries.pk %}">view Students</a>
viewAlbum 模板:
<div class="container">
<div class="row justify-content-center">
{% for prima in primaries %}
<div class="col">
<div class="card my-2" style="width: 18rem;">
<img src="{{ prima.profilePicture.url }}" alt="" class="card-img-top">
<div class="card-body">
<p>{{ prima.firstName }}</p>
<br>
<a href="{% url 'view-Student' prima.pk %}">view Students</a>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
viewStudents 模板:
<div class="container">
<div class="row justify-content-center">
<div class="card">
<div class="card-body">
<div class="row justify-content-center">
<img src="{{ prima.profilePicture.url }}" alt="" class="card-img-top">
<p>{{ prima.firstName }}</p>
</div>
</div>
</div>
</div>
</div>
但它不起作用
我该如何解决这个问题?
在您看来,
def viewAlbum(request):
primaries = Primary.objects.all() # RETURNS ALL
return render(request, 'viewAlbum.html', {'primaries': primaries})
primaries 没有 pk,因为它是一个查询集。
也许你的意思是遍历所有主要对象,像这样?
{% for p in primaries %}
<a href="{% url 'view-Student' p.pk %}">view Student</a>
{% endfor %}
编辑
您通过视图传递的名称必须与您在模板中使用的名称相匹配。由于您在模板中使用了名称 prima
,因此这就是您必须在视图中传递的名称:
def viewStudent(request, pk):
post = get_object_or_404(Primary, id=pk)
prima = Primary.objects.get(id=pk)
return render(request, 'viewStudent.html', {'post': post, 'prima': prima})