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在模板中获取当前视图的主要内容,如果未能解决你的问题,请参考以下文章

在所有视图django中获取用户上下文?

将 JSON 数组从 Django 视图返回到模板

获取 Django 视图中的复选框列表

如何从 django 中基于类的详细视图中获取当前对象/产品?

Django路由系统视图模板

如何从 Django 视图中获取价值到 Ajax 成功函数中