Django:使用条件 % extends % 使 % block "div" % 有条件
Posted
技术标签:
【中文标题】Django:使用条件 % extends % 使 % block "div" % 有条件【英文标题】:Django: making % block "div" % conditional with a conditional % extends %Django:使用条件 % extends % 使 % block "div" % 有条件 【发布时间】:2013-08-30 14:34:05 【问题描述】:我想在 AJAX 和常规 HTTP 调用之间共享一个模板,唯一的区别是一个模板需要扩展 base.html html,而另一个不需要。
我可以使用
% extends request.is_ajax|yesno:"app/base_ajax.html,app/base.html" %
动态决定何时扩展,但我还需要包含% block 'some_div' %% endbock %
标签来告诉渲染器将我的内容放在哪里。 ajax 调用需要忽略这些标签,因为 jQuery 告诉它在哪里放置带有 $('somediv').html(response)
的内容。
知道在不是 ajax 调用时如何动态包含这些块标签吗?
我一直在参考这个问题来弄清楚:
Any way to make % extends '...' % conditional? - Django
尝试通过 % if % 使其工作:
% extends request.is_ajax|yesno:",stamped/home.html" %
% if request.is_ajax == False%
% block results %
% endif %
% load stamped_custom_tags %
...
Content
...
% if request.is_ajax == False%
% endblock %
% endif %
但是当解析器遇到 % endif % 时失败
【问题讨论】:
【参考方案1】:这或其他变体不会吗?
% if request.is_ajax %
# ajax! #
% else %
% block 'some_div' %% endbock %
% endif %
【讨论】:
感谢您的回答 Rob,但我必须将模板重复两次。一次在您的 ajax 部分中没有块标记,一次在块标记中。这就像两个具有相同内容的单独模板一样糟糕,这正是我要避免的事情。 不,你不会。制作模板,当你到达块标签所在的部分时,使用条件。如果是 ajax,则不会有任何内容(只是评论),如果不是,则该块将去那里。 你试过了吗?在发布我的问题之前,我试图做这样的事情。我必须将块标签包裹在内容周围,所以我需要两个条件;一个用于块的开始,一个用于结束。问题是解析器在第一个 % block 'some_div' % 之后看到 endif 时会感到困惑。我之前无法通过解析器,这导致我在这里发帖。任何提示将不胜感激。 您能否发布一个简单版本的模板,以便我们了解发生了什么? 是的,那行不通。你不能有条件地中断一个块(如果只有一个是真的呢?)。我不明白你想用它来完成什么。【参考方案2】:我的解决方案:
% extends x|yesno:"stamped/blank.html,stamped/home.html" %
其中blank.html
包含:
% block results %% endblock %
<!-- to allow for corrected shared rendering
with ajax posts and normal django rendering -->
home.html
是我的标准应用页面,其中包含要扩展的结果块。
【讨论】:
以上是关于Django:使用条件 % extends % 使 % block "div" % 有条件的主要内容,如果未能解决你的问题,请参考以下文章