Обратное разрешение 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 %}">