我可以在django模板上下文处理器中访问url kwargs吗?

时间:2016-02-14 13:55:46

标签: python django django-templates

urls.py

url(r'^(?i)(?P<slug>[a-zA-Z0-9_]+)$', views_search.index, name='articles'),

context_processor.py

def get_username(request, **kwargs):
    print kwargs
    slug = kwargs.get('slug')
    return {
    'slug': slug
    }

但是当我运行它时,它打印空字典并且没有任何内容返回到模板。我在设置中的模板上下文处理器中添加了这个。我怎么能在这里访问kwargs?

2 个答案:

答案 0 :(得分:8)

如果解析了网址,则会将ResolverMatch对象设置为请求中的属性:

def get_username(request):
    if hasattr(request, 'resolver_match'):
        slug = request.resolver_match.kwargs.get('slug')
        return {'slug': slug}
    return {}

答案 1 :(得分:2)

实际上,对于基于类的视图,view已在上下文中可用,因此您可以直接访问模板中的kwargs。在模板中,只需执行以下操作:

{{ view.kwargs.slug }}

另请参阅this SO回答