Подскажите пожалуйста, что делает код `{% url ... %}`

Подскажите. пожалуйста, что делает строка <а href="{% url 'by_rubric' rubric.pk %)"> в коде? Какую функцию или ссылку нужно передать в url?

<div> 
  <а href="{% url 'index' %)">Главная</а> 
  {% for rubric in rubrics %) 
  <а href="{% url 'by_rubric' rubric.pk %)"> 
  {{ rubric.name ))</а> 
  {% endfor %) 
</div>
<form method="post"> 
  {% csrf_token %) 
  {{ form.as_p )) 
  <input type="submit" vаluе="Добавить">
</form>

Ответы (1 шт):

Автор решения: Миша

<а href="{% url 'by_rubric' rubric.pk %}"> - это ссылка в цикле. Эта ссылка будет повторяться len(rubrics) раз. В имени ссылки выводится имя рубрики. Сама ссылка, как я понимаю, ведёт к детальному отображению рубрики. Ну т.е в ссылке указано имя адреса куда будет происходить переадресация - это адрес с именем by_rubric и еще далее там указан аргумент rubric.pk. Соответственно у вас еще есть url-параметр в пути с именем by_rubric и, так как в пути есть url-параметр, то его нужно так же передавать, как аргумент в ссылку.

by_rubric указывается в параметре name в urlpatterns.py для путей, где это необходимо. Это применяется для того, чтобы не хардкодить ссылки в коде.

Django будет строить ссылку примерно так:

Допустим rubrics содержит 5 записей(скажем записи title1-title5) и если пройтись по этому списку в цикле, то будет ссылка на каждую запись(5 ссылок будет):

title1 (pk=1)
title2 (pk=2)
title3 (pk=3)
title4 (pk=4)
title5 (pk=5)

В названии ссылки выводятся имя рубрик, а в скобках, как я говорил выше - аргументы. На каждой итерации цикла подставляется pk каждой рубрики и url-параметр в пути с именем by_rubric получает pk каждой рубрики в цикле. Слишком развернуто я ответил :)

→ Ссылка