我正在使用django 2.1
和python 3.6
,但遇到了other people在过去几年中遇到的问题。
这是我的views.py
的一部分:
def blog_list_by_cat(request, cat_id, cat_name):
...
def blog_list_by_genre(request, genre_id, genre_name):
...
这是我的urls.py
:
urlpatterns = [
path('', views.index, name='index'),
re_path(r'^blog/(?P<blog_id>\d+)/(?P<slug>[^/]+)/?$', views.single_blog, name='single_blog'),
re_path(r'^blog-list/(?P<cat_id>\d+)/(?P<cat_name>[^/]+)/?$', views.blog_list_by_cat, name='blog_list_by_cat'),
path('blog-list/latest/', views.blog_latest, name='blog_latest'),
re_path(r'^blog-list/genre/(?P<genre_id>\d+)/(?P<genre_name>[^/]+)/?$', views.blog_list_by_genre, name='blog_list_by_genre'),
]
在我调用这些链接的模板中,该链接可以正常工作:
{% for cat in cat_list %}
<a class="dropdown-item" href="{% url 'blog_list_by_cat' cat_id=cat.id cat_name=cat.cat %}">{{ cat.cat }}</a>
{% endfor %}
与此同时在同一模板中引发错误:
{% for genre in genre_list %}
<li><a class="dropdown-item" href="{% url 'blog_list_by_genre' genre_id=genre.id genre_name=genre.title %}">{{ genre.title }}</a></li>
{% endfor %}
这是完整的错误:
异常类型:NoReverseMatch
异常值:带有关键字参数'{'genre_id'的'blog_list_by_genre'相反: 5,找不到'genre_name':'Action'}'。尝试了1种模式: ['blog-list / genre /(?P \ d +)/(?P [^ /] +)/?$']
如您所见,我使用的是named urls,并且使用的是网址名称周围的引号,而不是在网址中添加应用名称。两个代码是相同的。但是为什么第二个不起作用?
答案 0 :(得分:2)
尝试使用非贪婪的限定词:
(?P<genre_name>.+?)
有时候,当我的模型名称中有空格(例如“ Space Needle”)时,这可以帮助我匹配网址。