2017-07-14 85 views
3

我可以在Django模板中访问来自URL的命名参数的值吗?从Django模板中的URL访问kwargs

像我可以从django模板访问下面的值this_name

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

我能得到整个URL路径,并打破它,但要检查是否有做一个直接的方式,因为它已经有一个名字。

向下传递在视图中的上下文数据可能是一个选择,但不知道如果我确实需要它向下传递,因为我猜模板会已经拥有了它不知何故?虽然在request API找不到直接的方法。

+0

this_name将作为上下文传递,然后,因为它可以在模板中使用。我不明白你为什么不能访问。或者你想用其他方式访问它。可能是一个用例完整的将澄清这个问题 –

回答

4

在视图中,您可以访问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 }} 
+0

完美!感谢 – Anupam

+0

我不得不为不是基于基于类的看法,但不知何故无法弄清楚如何有访问kwargs另一个模板做到这一点。对于基于类的视图,该方法是否有所不同?在文档中搜索,但不能找到有用的东西。我尝试了'kwargs.this_name'但如果你有一个视图功能'高清my_view(请求,MYVAR,* ARGS ** kwargs)也犯规返回任何 – Anupam

+1

:'然后就看你在模板中包括上下文中的变量,例如'return render(request,'mytemplate.html',{'myvar':myvar,'foo':kwargs.get('foo')})' – Alasdair

-1

这可以从视图上的self.kwargs访问。覆盖get_context_data()将其传递给模板。这是做到这一点的正确方法。