Reverse for '**' with arguments '('',)' not found. 1 pattern(s) tried(topic_id与topic.id)

7 篇文章 0 订阅

最近在学习《python 从入门到精通》第19章,进行环境搭建时出现了一个错误,python 版本:3.7.4,django 版本:2.2.5

NoReverseMatch at /new_entry/2

Reverse for 'topic' with arguments '('',)' not found. 1 pattern(s) tried: ['topic/(?P<topic_id>[0-9]+)$'],截图如下:

错误里显示找不到带有"(")"参数的topic,尝试使用'topic/<int:topic_id>'来匹配。虽然图中显示报错在base.html,但此错误还是出现在new_entry.html,其源码如下:

{% extends "learning_logs/base.html" %}
{%block content %}

    <p><a href="{%url 'learning_logs:topic' topic_id %}"> {{ topic }} </a></p>

    <p>Add a new entry:</p>
    
    <form action ="{%url 'learning_logs:new_entry' topic.id %}" method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button name='submit'>add entry </button>
    </form>
    
{% endblock content %}

其中第4行使用到了topic_id,第8行使用的topic.id(已标红),使用topic_id的视图分别是topic和new_entry视图,topic_id是两个视图里面的形参。出现此错误的原因是一是在new_entry视图里未传送topic_id,导致topic_id被认为是无效参数,二是使用topic.id自动识别ID参数(在topic视图和new_entry视图里,topic=Topic.objects.get(id=topic_id))。所以解决方法有两个

(1)修改new_entry视图,将topic_id参数传过来,即将context={'topic':topic,'form':form}修改为context={'topic':topic,'form':form,'topic_id':topic_id},render函数保持不变

(2)修改第4行topic_id为topic.id 。此是书中的写法

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
这个错误通常表示 Django 在尝试使用给定的参数来反向解析 URL 时失败了。在这个特定的错误中,它告诉我们 Django 尝试使用参数 `(None,)` 来解析名为 `deleteuser` 的 URL,但未能找到匹配的 URL 模式。 这可能是由于多种原因引起的,其中一些可能包括: 1. 你没有正确地定义 URL 模式。请确保在 URLconf 文件中正确地定义了名为 `deleteuser` 的 URL 模式,并且该模式与视图函数匹配。 2. 你在使用 `reverse` 或 `{% url %}` 模板标签时,未正确地传递参数。请确保你传递了正确的参数,并且它们与 URL 模式中的参数匹配。 3. 你可能在模板中尝试使用 `{% url %}` 标签来生成 URL,而没有为模板上下文提供必要的参数。请确保你在使用 `{% url %}` 标签时,为其提供了必要的参数。 4. 如果你使用了命名空间,请确保你正确地指定了命名空间和 URL 名称。命名空间和 URL 名称组合起来唯一标识一个 URL 模式。 根据你的错误信息,我们可以看到参数 `(None,)` 被传递给了 `deleteuser` 视图函数。这可能是由于 `user.id` 为空导致的。请确保在调用 `disp_confirm()` 函数之前,已经正确地设置了 `user.id` 变量。你可以在模板中添加一个条件语句来检查 `user.id` 是否为空,以避免这个错误: ``` {% if user.id %} <button onclick="disp_confirm()">删除用户</button> {% endif %} ``` 如果 `user.id` 为空,则不会显示删除按钮。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值