{% url %} — тег шаблона для генерации URL по имени маршрута.
Базовое использование
# urls.py
urlpatterns = [
path('tasks/', views.task_list, name='task-list'),
path('tasks/<int:pk>/', views.task_detail, name='task-detail'),
path('tasks/new/', views.task_create, name='task-create'),
]
<!-- Простой URL -->
<a href="{% url 'task-list' %}">Все задачи</a>
<!-- Результат: /tasks/ -->
<!-- URL с параметром -->
<a href="{% url 'task-detail' pk=task.pk %}">{{ task.title }}</a>
<!-- Результат: /tasks/42/ -->
<!-- Позиционный аргумент -->
<a href="{% url 'task-detail' task.pk %}">{{ task.title }}</a>
С namespace
<a href="{% url 'tasks:list' %}">Список</a>
<a href="{% url 'tasks:detail' pk=task.pk %}">Детали</a>
Сохранение в переменную
{% url 'task-detail' pk=task.pk as task_url %}
<a href="{{ task_url }}">Ссылка</a>
<!-- Удобно для проверки -->
{% url 'task-edit' pk=task.pk as edit_url %}
{% if edit_url %}
<a href="{{ edit_url }}">Редактировать</a>
{% endif %}
Несколько параметров
# url: /courses/<course_slug>/lessons/<lesson_pk>/
path('<slug:course_slug>/lessons/<int:lesson_pk>/', views.lesson_detail, name='lesson-detail'),
{% url 'lesson-detail' course_slug=course.slug lesson_pk=lesson.pk %}
Почему {% url %} лучше хардкода
<!-- Плохо: хардкод пути -->
<a href="/tasks/{{ task.pk }}/">Задача</a>
<!-- Хорошо: при изменении URL в urls.py — шаблоны обновятся автоматически -->
<a href="{% url 'task-detail' pk=task.pk %}">Задача</a>
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!