【问题标题】:Reverse for 'x' not found. 'x' is not a valid view function or pattern name未找到“x”的反向。 “x”不是有效的视图函数或模式名称
【发布时间】:2018-11-16 15:31:33
【问题描述】:

我有三个页面 - 主页,http://127.0.0.1:8000/,在标题中显示一个段落句子和两个链接。和比萨饼列表,http://127.0.0.1:8000/pizzas。现在我试图在http://127.0.0.1:8000/pizzas 页面上为每个披萨添加链接,以便可以单击它们并查看可用的浇头。我可能因为我决定使用路径而不是 url() 来映射 url 而陷入困境,我正在关注的书使用了它。

错误:/pizzas 处的 NoReverseMatch。
未找到“pizza_w_toppings”的反向。 'pizza_w_toppings' 不是有效的视图函数或模式名称。

pizzas.html -

{% extends "pizzeria_app/base.html" %}

{% block content %}
<h1> Available Pizzas : </h1>
<ul>
{% for pizza in pizzas %}
 <li> <a href = {% url 'pizza_w_toppings' %}> {{pizza}}</a><li>
{% empty %}
  <p> We're outta Pizzas. next time bro! <p>
{% endfor %}
</ul>

{% endblock content %}

应用程序/urls.py:

urlpatterns = [
#homepage
path('', views.index),
#show available pizzas
path('pizzas', views.pizzas),
path('pizzas/<int:pizza_id>', views.pizza_w_toppings, name="pizza_w_toppings")

查看次数: 我是 StackOverflow 的新手,不知道如何添加我的 views.py。我附上图片,抱歉 views.py screenshot

【问题讨论】:

  • 你在使用namespace吗?

标签: django django-views django-urls


【解决方案1】:

您的网址标签应为{% url 'pizza_w_toppings' pizza.id %}。如果您检查documentation,您会看到所有可能的 url 标签变体。

例如,假设您有一个视图 app_views.client,其 URLconf 接受一个客户端 ID(这里,client() 是视图文件中的一个方法 app_views.py)。 URLconf 行可能如下所示:

path('client/&lt;int:id&gt;/', app_views.client, name='app-views-client')

如果此应用的 URLconf 包含在项目的 URLconf 中 像这样的路径:

path('clients/', include('project_name.app_name.urls'))

...然后,在模板中,您可以像这样创建指向该视图的链接:

{% url 'app-views-client' client.id %}

模板标签会输出字符串/clients/client/123/。

如果您使用命名空间,请确保在您的 url 标签中包含命名空间,如下所示:

{% url 'your-namespace:app-views-client' client.id %}

【讨论】:

  • Reverse for 'pizza_w_toppings' not found. 'pizza_w_toppings' is not a valid view function or pattern name。基于回溯,这是一个很好的观点,但如果是参数问题,Django 不会说is not a valid view function or pattern name,而是说"url with argument {"":""} bla bla
  • 谢谢,这是错误之一。但错误仍然存​​在。
  • @IrakliTchigladze,那么几乎唯一剩下的就是namespace 问题,正如@Lemayzeur 指出的那样。您可能已经在urlpatterns 上方定义了app_name = 'your_app_name_here',在这种情况下,您必须使用以下语法:{% url 'your_app_name_here:pizza_w_toppings' pizza.id %}
  • 成功了!!非常感谢。不过,“在 urlpatterns 之上”是什么意思?你的意思是主项目文件夹中的 urls.py,我在其中指向我在 app 文件夹中的 urls.py?
  • 如果你得到它的工作,不要介意“高于 urlpatterns”。 app_name 通常在应用程序 urls.py 的顶部某处定义,但这不是规则。
猜你喜欢
  • 1970-01-01
  • 2021-10-23
  • 2018-11-19
  • 2019-04-06
  • 2019-08-13
  • 2019-11-04
  • 2021-04-21
  • 2018-05-20
  • 2018-07-01
相关资源
最近更新 更多