Django % include % 标签显示硬编码字符串但不可变

Posted

技术标签:

【中文标题】Django % include % 标签显示硬编码字符串但不可变【英文标题】:Django % include % tag displays hardcorded string but not variableDjango % include % 标签显示硬编码字符串但不可变 【发布时间】:2018-05-05 05:19:35 【问题描述】:

我希望一个模板使用 Django % include % 标记从另一个模板继承变量。但它没有发生。

section.html,要继承的模板:

% block section1 %
<p>My cows are home.</p>
-->  word_in_template  <--
% endblock %

index.html,应该从section.html继承word_in_template

% include "section.html" with word_in_template=word_in_template %

我也试过% include "section.html" with word_in_template=word %

我的看法:

def myblog(request):
    return render_to_response('index.html')

def section(request):
    word = "frisky things."
    return render_to_response('section.html', 'word_in_template':word)

Chrome 中section.html 的输出:

My cows are home.

--> frisky things. <--

Chrome 中index.html 的输出:

My cows are home.

--> <--

我正在关注this solution,但它对我不起作用。 "frisky things" 显示我是否加载了section.html,但它没有显示在index.html 上。但是,硬编码字符串 My cows are home 显示在 index.html 上。

我想我也在关注documentation。但我是新来的,所以也许我读错了东西或其他东西。我做错了什么?

【问题讨论】:

请注意render_to_response 已过时,您应该改用render 块在您使用模板继承来扩展另一个模板时很有用,例如% extends 'base.html' %。当您使用% include % 时,您没有使用模板继承,因此在您的section.html 模板中包含% block section1 % 是没有意义的。 也感谢这些! 【参考方案1】:

当您在index.html 模板中包含section.html 时,它不会自动包含来自section 视图的上下文。您需要在 myblog 视图中包含上下文。

def myblog(request):
    word = "my_word"
    return render(request, 'index.html', 'word_in_template':word))

在模板中,正确的包含方法是word_in_template=word_in_template,因为word_in_template 是上下文字典中的键。

% include "section.html" with word_in_template=word_in_template %

【讨论】:

这给了我一个 NameError,name 'word' is not defined。那么,我也必须将变量word = "frisky things." 添加到myblog 视图中? 是的,如果你在上下文中包含word,你必须在视图中定义它。 好的。只是澄清一下,因为我认为% include % 会使代码更加干燥。谢谢! % include % 标签使您的模板更加干燥,它不会自动从其他视图中提取模板上下文。

以上是关于Django % include % 标签显示硬编码字符串但不可变的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用 % include % 标签在 django 中呈现模板(如部分)?

Django:动态构造% include %标签的值?

H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持

在 Django/GAE 中渲染包含的文件时没有显示错误

django模板之继承标签extend和添加标签include

如何使用“include”标签在 Django 中动态包含模板