访问模板或中间件中的命名 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 参数