2017-07-14 77 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()將其傳遞給模板。這是做到這一點的正確方法。