Обратное разрешение URL-адресов в Django с несколькими параметрами url

В моем приложении для блога мне нужно показывать статьи на основе url:

app_name = 'blog_app'

urlpatterns = [
    path('<int:user_id>/<int:year>/<int:month>', views.IndexView.as_view(), name='index'),
    path('<int:user_id>/<int:year>/<int:month>/<int:article_id>', views.DetailView.as_view(), name='detail'),
]

Структура проекта такова: myblog указывает на portal (для входа); после входа portal указывает на blog_app (который содержит список статей). Итак, шаги для показа статей следующие:

mysite_index --> portal_login --> blog_app_index

В приложении portal, после входа, используя кнопку, я хочу перейти к index представлению blog_app. Поэтому мне нужно указать все параметры url, и я пытаюсь сделать это таким образом:

{% if user.is_authenticated %}
<a href="
  {% url 'blog_app:index' 
       user_id = user.id 
       year = {% now "Y" %} 
       month = {% now "m" %} 
  %}
">
  <button class="btn btn-secondary" type="button">Go</button>
</a>
{% endif %}

Я не знаю, почему URL становится: http://127.0.0.1:8000/portal/%7B%25%20url%20'blog_app:index'%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20user_id%20%3D%20user.id%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20year%20%3D%202022%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20month%20%3D%2008%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%25%7D

Что я делаю неправильно? Как я должен делать этот тип реверса?

Вы не можете поместить {% ... %} внутри другого {% ... %}. Другое дело, что вы помещаете много "входов" и пробелов в href и фигурные скобки. Делайте это в одну строку и не оставляйте пробелов, если они не нужны (даже вокруг =), которые кодируются с помощью %20.

Вы можете получить текущий год и текущий месяц, добавив timezone.now() в качестве контекста, в примере:

from django.utils import timezone
...
context = {..., "today": timezone.now()}

Затем в шаблоне:

<a href="{% url 'blog_app:index' user_id=user.id year=today.year month=today.month %}">
Вернуться на верх