Django получает переменные url в данных get_context?

Допустим, у меня есть url следующего вида

    path(
        'foo/<int:foo_id>/edit/',
        views.FooView.as_view(),
        name='foo',
    ),

и вид, подобный этому:

    def get(self, request, foo_id):

Я нахожу распространенной идиомой получение переменной URL foo_id в контексте.

Единственное, к чему контекст имеет доступ по умолчанию, это request. Я попробовал проверить request и request.GET и ничего не увидел.

Есть ли способ лучше, чем:

  • Вручную добавлять переменные url в context_data после get_context_data()
  • или передавая их в get_context_data из пользовательского вызова из get? (некрасиво, потому что представления, основанные на классах, ожидают той же сигнатуры get_context_data)
  • .

Параметры url хранятся в .kwargs в view. Таким образом, вы можете получить доступ и отобразить их с помощью:

{{ view.kwargs.foo_id }}

Передается ссылка с именем view, которая является объектом View, построенным при обработке запроса. Таким образом, мы обращаемся к атрибуту .kwargs этого объекта View, а в kwargs ищем kwargs['foo_id'].

Особенностью Django является то, что TemplateView [Django-doc] передает все свои kwargs элементы как контекстные данные, если ваше представление, таким образом, является TemplateView, то вы можете отобразить это с помощью

<!-- only a TemplateView -->
{{ foo_id }}
Вернуться на верх