添加两个参数会导致NoReverseMatch

时间:2020-06-24 14:16:54

标签: python python-3.x django django-templates django-urls

我为日志创建了一个模型:

class LogBook(models.Model):
    token = models.CharField(max_length=500, blank=True, null=True)

class LogMessage(models.Model):
    logbook = models.ForeignKey(
        LogBook, on_delete=models.CASCADE, related_name="logmessages")
    message = models.CharField()

我的观点

def logmessage_delete(request, logmessage_id, log_id, token):
    log = get_object_or_404(LogBook, token=token,  pk=log_id)
    logmessages = LogMessage.objects.filter(logbook=log, message=logmessage_id)
    logmessages.delete()

网址

delete/<int:logmessage_id>/<int:log_id>/<str:token>

在我的模板中,我尝试过:

 {% url 'log-delete' logmessage_id log_id token %}

我没有反向匹配,但是如果我尝试例如:http:// localhost:8000 / log / delete / 15/9/1,它就可以正常工作。

完全错误:

找不到带有参数'('',``,'')''的'log-delete'的反向。尝试了1个模式:['log / delete /(?P [0-9] +)/(?P [0-9] +)/(?P [^ /] +) $']

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

请尝试这个

{% abs_url 'app_name:log-delete' request logmessage_id=logmessage_id log_id=log_id token=token %}

这里我们使用 abs_url (模板标记),而 app_name 是应用程序的名称。abs_url模板标记代码如下所示。此代码100%有效

from django import template
from django.urls import reverse
register = template.Library()

@register.simple_tag
def abs_url(value, request, **kwargs):
    return reverse(value,kwargs=kwargs)
相关问题