Реверс для '' с аргументами ключевого слова '' не найден - PullRequest
0 голосов
/ 19 ноября 2018

Я использую django 2.1 и python 3.6 и сталкиваюсь с проблемой, которая выглядит так: другие люди столкнулись в последние годы.

Это часть моего 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

Значение исключения: обратное для 'blog_list_by_genre' с аргументами ключевого слова '{' genre_id ': 5, 'genre_name': 'Action'} 'не найден. 1 шаблон (ы) пробовал: [ 'Блог-лист / жанр / (? P \ d +) / (? P [^ /] +) /? $']

Как видите, я использую с именами URL , и я использую кавычки вокруг имени URL, а не добавляю имя приложения в URL. оба кода одинаковы. Но почему не работает второй?

1 Ответ

0 голосов
/ 19 ноября 2018

Попробуйте использовать некожадный квалификатор:

(?P<genre_name>.+?)

Иногда это помогает мне сопоставить URL, когда в названии моей модели есть пробел, например "Space Needle".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...