Django在模板中获取当前视图
Posted
技术标签:
【中文标题】Django在模板中获取当前视图【英文标题】:Django get current view in template 【发布时间】:2013-06-16 13:41:29 【问题描述】:如何在 Django 1.5 的模板中获取当前视图的全名 (my_app.views.index)?
对于表单,我在使用模板标签读取的模板中有一个名为“view”的对象。 但是对于 DetailViews,我看不到任何类似的东西。
有没有办法使用自定义模板处理器?
谢谢
编辑
情况1:
-
我检索了一个页面,例如“/foo/bar/5/edit”。
Django 将以 pk=5 调用“foo.views.editbar”。
此视图呈现模板“foo/bar_form.html”
情况2:
-
如果我检索到 '/foo/bar/new'
Django 将调用“foo.views.newbar”
此视图呈现与上面相同的模板 ('foo/bar_form.html')
如何签入此模板“foo/bar_form.html”,它是从哪个视图呈现的? 结果应该是其中之一
'foo.views.editbar' 'foo.views.newbar'【问题讨论】:
你想干什么? 你能解释更多你的问题吗?如果可以的话请放代码 【参考方案1】:在视图中输入
% with request.resolver_match.view_name as view_name %
...
view_name
...
% endwith %
【讨论】:
【参考方案2】:只需set attribute 请求视图中的对象:
setattr(request, 'view', 'app.views.func')
并在模板中检查:
% if request.view == 'app.views.func' %
do something
% endif %
它对我有用。
【讨论】:
为什么要使用setattr
而不是getattr
。 Set 会将属性设置为传递给它的值。【参考方案3】:
我不确定我是否完全理解该要求,但请查看inspect.stack。
inspect.stack()[1][3]
【讨论】:
谢谢!这会起作用,但这是一个非常肮脏的黑客攻击。真的没有办法直接在中间件或模板标签中检索这些信息吗? 我不知道。我使用这种方法,所以如果您找到更好的方法,请告诉我:)。小指导 - 只需评论它在做什么,以便将来您不会对这个奇怪的代码感到困惑。以上是关于Django在模板中获取当前视图的主要内容,如果未能解决你的问题,请参考以下文章