Pau*_*ulo 7 python django django-templates
有没有办法在模板标签中获取模板名称(被解析)?我已经阅读了搜索但没有找到任何内容,只有这篇上一篇文章 在django模板中获取模板名称
这对我没什么帮助,因为答案依赖于settings.DEBUG是真的,在我的情况下不可能.
我真的不知道从哪里开始,所以欢迎任何建议:)
编辑
所以基本上我想要的是创建一个可插入的标签,当它渲染它检查Tag对象时,这将是标签对象的源
class Tag(models.Model):
template = models.CharFIeld(max_length=50)
name = models.CharField(max_length=100)
plugins = models.ForeignKey(PluginBase)
Run Code Online (Sandbox Code Playgroud)
如果是一个标签对象,那么它会显示所有插件对象,如果没有,它会创建一个标签对象,该标签对象对模板标签和模板名称中提供的名称是唯一的,如果不能获得模板名称,那么我想我可以做每个名字都是独特的.对于那些熟悉django-cms的人来说,整个标签有点像占位符
您也许可以使用上下文处理器来执行此操作,但我不确定它们是否可以访问模板的名称。
有效的方法是为您所做的渲染调用制作一个包装器。假设您当前执行以下操作:
from django.shortcuts import render
def index(request):
return render(request, 'app/index.html', { 'foo': 'bar', })
Run Code Online (Sandbox Code Playgroud)
如果您为此创建自己的包装器,则可以在实际渲染发生之前将模板名称添加到字典中:
from django.shortcuts import render
def myrender(request, template, dictionary):
dictionary.update({'template_name': template})
return render(request, template, dictionary)
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中,将其更改如下(假设您将上述函数保存在 中myutils.py,并且它在您的路径中可用):
#from django.shortcuts import render <- delete this line
from myutils import myrender as render
def index(request):
return render(request, 'app/index.html', { 'foo': 'bar', })
Run Code Online (Sandbox Code Playgroud)
现在,您的所有render调用都将使用模板名称更新字典。在任何模板中,只需使用即可{{ template_name }}获取名称。当然,您也可以以render_to_response类似的方式更新其他渲染函数。
另外,import myrender as render稍后可能会或可能不会让您感到困惑,因为它的命名类似于 Django 函数...如果是这样,只需导入它而不带“ as render”,并将所有render调用替换为myrender. 就我个人而言,我更喜欢这个,因为这使其成为现有渲染功能的直接替代品。
| 归档时间: |
|
| 查看次数: |
5640 次 |
| 最近记录: |