Short version:

是否有一种简单的内置方法来标识Django模板中的调用视图,而不传递额外的上下文变量?

Long (original) version:

我的一个Django应用程序有几个不同的视图,每个视图都有自己的命名URL模式,都呈现相同的模板.根据被调用的视图,需要更改的模板代码非常少,太少了,不值得 for each 视图设置单独的模板,所以理想情况下,我需要找到一种方法来标识模板中的调用视图.

我已经try 将视图设置为传入额外的上下文变量(例如,"VIEW_NAME")来标识调用视图,我还try 了{% ifequal request.path "/some/path/" %}次比较,但这两种解决方案似乎都不是特别好.有没有更好的方法从模板中标识调用视图?有没有办法访问视图的名称或URL模式的名称?


Update 1:关于这只是我误解MVC的一个例子的 comments ,我理解MVC,但是Django's not really an MVC framework.我相信我的应用程序的设置方式与Django对MVC的看法是一致的:视图描述了which个数据,模板描述了how个数据.碰巧我有许多视图准备了不同的数据,但它们都使用相同的模板,因为所有视图的数据呈现方式都相同.我只是在寻找一种简单的方法来从模板中识别调用视图,如果存在的话.

Update 2:谢谢你的回答.我认为这个问题被过度考虑了——正如我在最初的问题中提到的,我已经考虑并try 了所有建议的解决方案——所以我把它浓缩到了问题顶部的"简短版本".现在看来,如果有人只是简单地说"不",这将是最正确的答案:)

Update 3:卡尔·迈耶(Carl Meyer)贴出了"不"的帖子:)再次感谢大家.

推荐答案

不,这是个坏主意.从模板直接引用视图函数名会在视图层和模板层之间引入过度紧密的耦合.

这里更好的解决方案是Django的模板继承系统.定义一个通用的父模板,为需要在每个视图的版本中更改的(小)区域定义一个挡路.然后定义每个视图的模板以从父视图扩展,并适当地定义该挡路.

Django相关问答推荐

我无法在Django模板中使用Get_Foo_Display

模仿没有像预期的那样工作(Django)

如何在 Django 中设置与 Session 相关的字段

错误404除主要应用程序外,HTML页面无法渲染的其他应用程序

Django通用列表视图与多查询搜索

无法迁移,模型中的外键导致了问题

如何删除django请求中的重复项

Django ModelForm提交按钮不起作用

为什么我的搜索功能返回错误相关字段查找无效:​​类别

所有子元素的Django自递归外键过滤器查询

Django 相当于 COUNT 和 GROUP BY

is_valid() vs clean() Django 表单

Django - 如何从模型中 Select 特定列?

可以在 github 页面上托管 django 站点吗?

Django:使用 ModelForm 编辑现有数据库条目

Matplotlib - Tcl_AsyncDelete:异步处理程序被错误的线程删除?

模型表格Save保存,Get获取保存的对象

Django:在还原(迁移)后try 访问数据库时权限被拒绝

基于 User-Agent 更改 Django 模板

Django admin:使字段在添加中可编辑但不可编辑