Django模板语言未被HTML渲染,标签原样输出求助
问题原因及修复方案
兄弟,你的问题根源一眼就能看出来:模板标签里多余的空格让Django根本识别不出这些是模板标签,所以才会把{ % for... %}这类内容原样输出。Django对模板标签的格式有严格要求,必须是{% 标签内容 %}的形式——注意{%和后面的内容之间不能有空格,%}前面也不能加多余空格。
我帮你梳理下具体的错误点和修正方法:
标签格式错误:所有带空格的标签都要修正,比如:
- 把
{ % verbatim % }改成{% verbatim %} - 把
{ % if num is not None %}改成{% if num is not None %} - 把
{ % for some_item in some_list % }改成{% for some_item in some_list %}
所有{%和%}内部的多余空格都要删掉,保持标签的紧凑格式。
- 把
过滤器语法错误:你写的
{% if some_item | divisibleby = "2" %}是错的,正确写法是{% if some_item|divisibleby:2 %}:- 变量和过滤器之间不能有空格
- 过滤器和参数之间用冒号
:分隔,不是等号 - 数字参数不需要加引号
闭合标签错误:循环里的
{ % % }是无效的,应该用{% endif %}来闭合if判断。循环后变量失效问题:最后一行
<p>Some item is {{ some_item }}</p>里的some_item会没有值,因为for循环结束后,这个变量就不在上下文里了,如果要显示循环内的内容,得在循环块里处理。
下面是修正后的完整模板代码:
{% extends "base.html" %} {% block content %} <!DOCTYPE html> <html lang="en"> <head> </head> <body> <h1>Hello World!</h1> <p> This is <code>{% verbatim %}{{ html_var }}{% endverbatim %}</code> html coming through </p> <p>{% if num is not None %} Random number is: {{ num }} {% endif %}</p> <p>{% for some_item in some_list %} {% if some_item|divisibleby:2 %} Even number {{ some_item }}<br> {% endif %} {% endfor %}</p> <!-- 如果你想显示循环内的项,建议放在循环里,或者用列表属性,比如下面这样 --> <!-- <p>Last item in list: {{ some_list.last }}</p> --> </body> </html> {% endblock content %}
简单总结下:Django的模板引擎是靠{%和%}这个精确的标记来识别标签的,一旦你在中间加了空格,它就会把整个字符串当成普通文本输出,不会执行任何模板逻辑。调整好标签格式后,再修正过滤器和闭合标签的问题,你的模板就能正常渲染啦!
内容的提问来源于stack exchange,提问作者Ashok Kumar
相关产品推荐
相关产品推荐

