Как правильно написать URL из разных типов данных {%url var:str %}

Я новичок в Django - не судите строго.

В шаблоне есть такой url, он работает:

{% url 'software:index' %}

Но мне нужно 'software' записать в качестве переменной, а именно {{menu.name}}

То есть как-то так {% url menu.name:'index' %}, где menu_name - переменная, а index - текст.

Не пойму синтаксиса как это сделать. Не получается слить оба значения в единое значение, чтобы Django правильно его прочёл.

Прошу помощи у экспертов.


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

Автор решения: Sergey S.

В шаблоне есть такой url, он работает: {% url 'software:index' %}

Здесь используется так называемы namespace-адреса (подробнее). А вы, если я правильно понял, хотите передать переменную в ваше представление. Тогда это не то, что вам нужно.

url-адреса с аргументами задаются в шаблоне в таком виде:

{% url 'path_name' some_arg='some_value' %}

В кавычках вы задаете имя пути, а после передаете необходимые аргументы.

Для этого path или url должен иметь примерно такой вид:

urlpatterns = [
    ...
    path('page/<some_arg>/', views.some_view, name='path_name'),
]

Вы также можете указывать Django только те типы передаваемых аргументов, которые вам нужны. Если вы хотите получать в качестве переменной только строку, исправьте предыдущий пример на это:

urlpatterns = [
    ...
    path('page/<str:some_arg>/', views.some_view, name='path_name'),
]

Если вы хотите передать больше переменных, то разделите их в тэге шаблона пробелами:

{% url 'path_name' some_arg='some_value' second_arg=2 %}

и не забудьте добавить эти аргументы в путь:

urlpatterns = [
    ...
    path('page/<str:some_arg>/<int:second_arg>', views.some_view, name='path_name'),
]

Прочитайте подробнее о url-адресах и диспетчере url в официальной документации

→ Ссылка