Как правильно написать URL из разных типов данных {%url var:str %}
Я новичок в Django - не судите строго.
В шаблоне есть такой url, он работает:
{% url 'software:index' %}
Но мне нужно 'software' записать в качестве переменной, а именно {{menu.name}}
То есть как-то так {% url menu.name:'index' %}, где menu_name - переменная, а index - текст.
Не пойму синтаксиса как это сделать. Не получается слить оба значения в единое значение, чтобы Django правильно его прочёл.
Прошу помощи у экспертов.
Ответы (1 шт):
В шаблоне есть такой 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 в официальной документации