【问题标题】:NoReverseMatch when using with tag to set URL pattern name使用 with 标签设置 URL 模式名称时的 NoReverseMatch
【发布时间】:2023-03-08 05:29:02
【问题描述】:

我收到一条错误消息:

NoReverseMatch at /books/
Reverse for 'urlvar' not found. 'urlvar' is not a valid 
view function or pattern name.

我猜{% with %} 标签在books/index.html 中效果不佳 但我不知道如何解决。

这是我的代码:

书籍/urls.py

from django.conf.urls import url
from books import views

urlpatterns = [
url(r'^$', views.BooksModelView.as_view(), name='index'),

url(r'^book/$', views.BookList.as_view(), name='book_list'),
url(r'^author/$', views.AuthorList.as_view(), name='author_list'),
url(r'^publisher/$', views.PublisherList.as_view(), name='publisher_list'),

url(r'^book/(?P<pk>\d+)/$', views.BookDetail.as_view(), name='book_detail'),
url(r'^author/(?P<pk>\d+)/$', views.AuthorDetail.as_view(), name='author_detail'),
url(r'^publisher/(?P<pk>\d+)/$', views.PublisherDetail.as_view(), name='publisher_detail'),
               ]

模板/书籍/index.html

{% extends 'base_books.html' %}

{% block content %}
<h2>Books Management Systemt</h2>
<ul>
{% for modelname in object_list %}
    {% with 'books:'|add:modelname|lower|add:'_list' as urlvar %}
        <li><a href="{% url 'urlvar' %}">{{ modelname }}</a></li>
    {% endwith %}
{% endfor %}
</ul>
{% endblock %}

【问题讨论】:

  • url 中的 name='urlvar' 在哪里?
  • 你使用的是哪个版本的 Django?
  • @Alasdair 我正在使用 2.0.7
  • @HemanthSP 我必须把 name=urlvar 放在哪里?
  • Charlotte Lee 请按照以下 Alasdair 的回答,

标签: django django-templates


【解决方案1】:

urlvar 是一个变量,因此您在{% url %} 标记中使用urlvar,而不是字符串'urlvar'

<li><a href="{% url urlvar %}">{{ modelname }}</a></li>

如果您愿意,可以在标记中构造 URL 模式名称,或者如果您觉得更易读,请保留 with 标记。

<li><a href="{% url 'books:'|add:modelname|lower|add:'_list' %}">{{ modelname }}</a></li>

由于您在反转 url 时使用的是 'books: 命名空间,因此您应该在 books/urls.py 文件中设置 app_name

from django.conf.urls import url
from books import views

app_name = 'books'

urlpatterns = [
    ...
]

【讨论】:

  • “仍然无法正常工作”信息不足以帮助您。如果您删除了引号,则错误消息会有所不同,因此您应该使用该信息更新您的问题。
  • 对不起,它说'NoReverseMatch at /books/'books' 不是注册的命名空间'
  • 哈哈是的,我没保存好。上面的评论说明了我删除后遇到的不同错误
  • 您需要在您的urls.py 中设置app_name。查看更新的答案。
  • books/urls.py,见上例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 2023-03-10
  • 2014-07-17
  • 1970-01-01
相关资源
最近更新 更多