访问模板或中间件中的命名 URL 参数

Posted

技术标签:

【中文标题】访问模板或中间件中的命名 URL 参数【英文标题】:Access named URL parameter in Template or Middleware 【发布时间】:2012-03-24 03:03:20 【问题描述】:

在我的 url conf 中,我有几个 URL 具有相同的命名参数 user_id。 是否可以在中间件中访问此参数 - 这样我通常可以将其传递给 context_data - 或在模板本身中?

用于说明问题的示例 URL conf:

url(r'^b/(?P<user_id>[0-9]+)/edit?$', user.edit.EditUser.as_view(), name='user_edit'),
url(r'^b/(?P<user_id>[0-9]+)/delete?$', user.delete.DeleteUser.as_view(), name='user_delete')

【问题讨论】:

【参考方案1】:

对于基于类的视图,view 已经在上下文中可用,因此您不需要在视图端做任何事情。在模板中,只需执行以下操作:

 view.kwargs.user_id 

见this回答

【讨论】:

这应该是公认的答案,因为这不需要额外的代码。【参考方案2】:

如果您需要模板中的这些数据,只需覆盖视图的get_context_data 方法:

class MyView(View):
    def get_context_data(self, **kwargs):
        context = super(MyView, self).get_context_data(**kwargs)
        context['user_id'] = self.kwargs.get('user_id')
        return context

【讨论】:

【参考方案3】:

对于基于函数的视图:

模板

% url 'view' PARAM=request.resolver_match.kwargs.PARAM %

views.py

def myview(request, PARAM):
    ...

Django 2.2

【讨论】:

以上是关于访问模板或中间件中的命名 URL 参数的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5.3 的中间件中访问路由 URL 参数

Laravel 测试中间件中的 URL 参数 BEFORE 组中间件

node.js之路由,中间件,ge请求和post请求的参数

node的webserver模板

在Slim 4中访问中间件中的路由参数。

Lumen:如何从中间件获取 url 参数