在Django模板中从URL获取kwargs

28

我可以在Django模板中访问命名参数(从URL中获取)的值吗?

比如说,我可以从Django模板中访问下面这个this_name的值吗?

url(r'^area/(?P<this_name>[\w-]+)/$', views.AreaView.as_view(), name="area_list")

我可以获取整个URL路径并将其拆分,但想检查是否有一种直接的方法来完成这个操作,因为它已经有一个名称了。

从视图中在上下文数据中传递它可能是一种替代方法,但不确定是否需要传递它,因为我猜模板可能已经以某种方式拥有它?尽管在请求API 中找不到直接的方法。


this_name 将作为上下文传递,然后可以在模板中使用。我不明白为什么您无法访问它。或者您想以其他方式访问它?也许一个完整的用例可以澄清这个问题。 - Arpit Solanki
1个回答

54

在视图中,您可以将URL的argskwargs作为self.argsself.kwargs访问。

class MyView(View):
    def my_method(self):
        this_name = self.kwargs['this_name']

如果你只想在模板中访问值,那么你不需要在视图中进行任何更改。基础的get_context_data 方法会将视图添加到上下文作为 view,因此您可以在模板中添加以下内容:

{{ view.kwargs.this_name }}

我必须为另一个不基于类视图的模板执行此操作,但不知道如何在那里访问kwargs。非基于类的视图的方法是否不同?在文档中搜索,但尚未找到有用的信息。我尝试了kwargs.this_name,但也没有返回任何内容。 - Anupam
6
如果你有一个视图函数 def my_view(request, myvar, *args **kwargs): 那么需要你将变量包含在模板上下文中,例如 return render(request, 'mytemplate.html', {'myvar': myvar, 'foo': kwargs.get('foo')})。请注意要保持原意,使内容通俗易懂。 - Alasdair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接