【发布时间】:2021-03-08 05:42:51
【问题描述】:
我正在尝试将删除对象功能添加到我正在构建的应用程序中,当我尝试在模板中链接到它时,我得到...
NoReverseMatchError 未找到带有参数 '('',)' 的 'delete_player' 的反向操作。尝试了 1 种模式:['game/delete_player/(?P[0-9]+)$']
据我所知,(我认为)我在模板中使用了正确的格式。我认为对象的 id 没有正确传递或根本没有传递存在问题。我一直在寻找 Stack overflow here 和 google 试图找到类似的问题,但我找不到任何与我正在经历的完全匹配的东西。任何建议表示赞赏。
我试图传递给删除函数的模型对象是一个选择字段,看起来像这样。
class Player(models.Model):
PLAYER_ROLE_CHOICES = (
(1, 'Quarterback'),
(2, 'Runningback'),
(4, 'Widereceiver'),
(5, 'Tightend'),
(6, 'Kicker'),
)
role = models.PositiveSmallIntegerField(choices=PLAYER_ROLE_CHOICES)
模型使用forms.py中的表单
class PlayerForm(forms.Form):
quarterback_name = forms.CharField(label='Quarterback', max_length=100)
runningback_name = forms.CharField(label='Runningback', max_length=100)
widereceiver_name = forms.CharField(label='Widereceiver', max_length=100)
tightend_name = forms.CharField(label='Tightend', max_length=100)
kicker_name = forms.CharField(label='Kicker', max_length=100)
def save(self):
quarterback_name = self.cleaned_data.get('quarterback_name')
Quarterback.objects.create(name=quarterback_name)
runningback_name = self.cleaned_data.get('runningback_name')
Runningback.objects.create(name=runningback_name)
widereceiver_name = self.cleaned_data.get('widereceiver_name')
Widereceiver.objects.create(name=widereceiver_name)
tightend_name = self.cleaned_data.get('tightend_name')
Tightend.objects.create(name=tightend_name)
kicker_name = self.cleaned_data.get('kicker_name')
Kicker.objects.create(name=kicker_name)
我在views.py中的删除对象函数是这样的
def delete_player(request, id):
player = Player.objects.get(id=id)
player.delete()
return redirect('show')
urls.py 中的路径是这些...
path('delete_player/<int:id>', views.delete_player, name="delete_player")
path('show/<int:id>', views.show, name="show")
我在我的 html 模板中使用它。
<tr>
<td>{{ QB }}
<a href="{% url 'delete_player' player.id %}">Delete</a>
</td>
</tr>
正在渲染的模板称为“show.html”,由views.py中的这个函数渲染
def show(request, id):
player = Player.objects.get(id=id)
user = request.user
if user.is_authenticated:
try:
QB = Quarterback.objects.values_list('name', flat="True")[0]
except IndexError:
QB = 'empty'
try:
RB = Runningback.objects.values_list('name', flat="True")[0]
except IndexError:
RB = 'empty'
try:
WR = Widereceiver.objects.values_list('name', flat="True")[0]
except IndexError:
WR = 'empty'
try:
TE = Tightend.objects.values_list('name', flat="True")[0]
except IndexError:
TE = 'empty'
try:
K = Kicker.objects.values_list('name', flat="True")[0]
except IndexError:
K = 'empty'
print(QB)
context = {
'QB': QB[0:],
'RB': RB[0:],
'WR': WR[0:],
'TE': TE[0:],
'K': K[0:],
'player': player
}
return render(request,"game/show.html", context)
【问题讨论】:
-
你能分享一下渲染模板的视图吗?可能你没有通过
player之类的东西。 -
当然。让我提出来。
-
您的
context不包含player... 那么player.id的值究竟是多少? -
啊!这很有意义。好的,我在views.py中将“id”作为参数添加到我的函数中,向def(delete_player)添加了一个名为“player”的实例,并相应地更改了“show”url。我在这里的原始帖子中编辑了我的代码以显示更改。现在它给了我一个 404 错误???
标签: python django django-models django-templates django-urls