找不到带有关键字参数“”的“”

时间:2018-11-19 05:45:03

标签: django python-3.x url

我正在使用django 2.1python 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,并且使用的是网址名称周围的引号,而不是在网址中添加应用名称。两个代码是相同的。但是为什么第二个不起作用?

1 个答案:

答案 0 :(得分:2)

尝试使用非贪婪的限定词:

(?P<genre_name>.+?)

有时候,当我的模型名称中有空格(例如“ Space Needle”)时,这可以帮助我匹配网址。