覆盖 Django 渲染方法
Posted
技术标签:
【中文标题】覆盖 Django 渲染方法【英文标题】:Override Django Render Methods 【发布时间】:2017-12-11 19:51:33 【问题描述】:使用以下渲染器...
from django.shortcuts import render
...
return render(request, 'template.html', 'context':context,)
是否可以覆盖渲染类的方法,以便在某些情况下我可以自己解释模板标签,例如,如果我找到由某种格式组成的标签,例如...
% url 'website' page.slug %
我可以把它指向...
/theme/theme-1/page.html
或
/theme/theme-2/page.html
取决于多余的设置。
【问题讨论】:
【参考方案1】:render
方法只是一个快捷方式:
template = loader.get_template(''template.html')
context =
...,
return HttpResponse(template.render(context, request))
因此,尝试改变 url 标签的行为并不是正确的地方。
对于您给出的示例,网站看起来应该是一个包含theme-1
或theme-2
的变量。然后,您可以将变量传递给 url 标记,而不是字符串 'website'
。
% url website page.slug %
如果这不可行,您可以创建一个 custom template tag my_url
,根据您的设置返回正确的 url。
【讨论】:
其他人将负责创建模板并本能地使用 % url % 我只想能够在一个程序中加载多个网站并在必要时拦截路由。这将是一个主题库,但代码必须在添加到实际站点后才能正常运行。 正如@alasdair 指出的那样,您应该尝试自定义模板标签,而不是更改渲染的默认行为。查看此 SO 帖子以获取示例 ***.com/questions/6451304/… 您可以使用BUILTINS
选项将 Django 的 url 标签替换为您自己的标签。我不认为这是一个好主意。你也可以看看TemplateResponse
而不是render
,因为它有额外的钩子。以上是关于覆盖 Django 渲染方法的主要内容,如果未能解决你的问题,请参考以下文章