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 }}