我是Django的新手。 我在构建应用程序时一直收到NoReverseMatch。想知道是否有人可以指出我在哪里出错了正确的方向。
应用程序有方案,每个方案都有关联的电子邮件。当我点击场景时,应用程序会显示与场景关联的电子邮件,然后允许用户删除/编辑每个关联的电子邮件。
当我尝试删除电子邮件时,如果我将success_url设置为email:index,则会收到NoReverseMatch,该电子邮件生成该场景的电子邮件列表。如果我将success_url更改为主屏幕(scenario:index),则可以使用,但是如果用户进入主屏幕列出每次删除的情况,这是不理想的。
以下是我的电子邮件数据源的网址格式
# emails
# /scenarios/<scenarioid>/email
url(r'^(?P<pk>[0-9]+)/email/$', views.EmailListView.as_view(), name='email-index'),
# /scenarios/12/email/<emailid>/delete
url(r'^([0-9]+)/email/(?P<pk>[0-9]+)/delete/$', views.EmailDelete.as_view(), name='email-delete'),
这是我的观点文件:
class EmailDelete(DeleteView):
model = Email
success_url = reverse_lazy('scenarios:email-index')
class EmailListView(generic.ListView):
model = Email
template_name = 'scenarios/emailindex.html'
context_object_name = 'scenario_emails'
print "in email list view"
def get_queryset(self):
return Email.objects.filter(scenario=self.kwargs['pk'])
这是模板:
<td><form action="{% url 'scenarios:email-delete' email.id %}" method="post">
{% csrf_token %}
答案 0 :(得分:0)
email-delete
网址有两个捕获组 - 一个非命名([0-9]+)
,另一个名为(?P<pk>[0-9]+)
,但在url
标记中只传递位置参数 - {{1 }}。您必须从url模式中删除第一个组或将两个参数传递给email.id
标记。像这样url
。