【问题标题】:Adding two parameters cause a NoReverseMatch添加两个参数会导致 NoReverseMatch
【发布时间】:2020-10-14 20:07:16
【问题描述】:

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

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 它工作得很好。

完全错误:

未找到带有参数“(”,“”,“”)的“日志删除”的反向操作。尝试了 1 种模式:['log/delete/(?P[0-9]+)/(?P[0-9]+)/(?P[^/]+) $']

有什么想法吗?

【问题讨论】:

  • 向我们展示完整的错误消息,包括尝试的模式和完整的 url 映射。
  • 模板中显然不存在logmessage_idlog_idtoken 变量。
  • @KlausD 我已经更新了我的帖子,谢谢!
  • 是的,你的变量没有填充。
  • @KlausD 这是什么意思,我已将它们添加到我的 URL 和模板中

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


【解决方案1】:

请试试这个,

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

这里我们使用abs_url(模板标签),app_name是app的名字。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)

【讨论】:

    猜你喜欢
    • 2017-05-14
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 2016-01-28
    • 2012-11-17
    • 2022-01-14
    • 2018-09-28
    相关资源
    最近更新 更多