首页 > 网页制作 >Django模板block标签显示为原始代码的解决方法

Django模板block标签显示为原始代码的解决方法

来源:互联网 2026-07-16 07:07:07

Django模板中{%block%}标签显示为原始代码,原因是浏览器直接打开HTML文件,未经过Django服务器解析。正确流程需通过HTTP请求、路由匹配、视图调用render()、模板引擎解析后返回渲染HTML。需确保settings.py中注册应用并配置模板目录,urls.py正确路由,视图函数使用render(),base.html定义content

你是否遇到过这样的场景:浏览器里显示的Django模板页面,{% block %}{{ }}这类标签没有被渲染,而是直接以原始代码的形式出现在眼前?别急,这不是你的代码写错了,而是Django根本就没参与渲染。

问题根源其实很简单:HTML文件被浏览器直接打开了(比如通过file://协议),而非经过Django服务器解析。浏览器把{% block content %}当成了纯文本,原样输出——毕竟,它只认得HTML标签,对Django的模板语法一窍不通。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

正确的流程必须是:HTTP请求 → Django路由匹配 → 视图调用 render() → 模板引擎解析{% block %}等标签 → 返回渲染后的HTML。少了任何一环,模板语法都会“裸奔”在页面上。

问题根源:模板未被Django引擎解析

看到 {% block content %}{% endblock %} 这样的原始文本,不是语法错误,而是Django根本没有介入渲染。浏览器直接加载 .html 文件时,会将其当作静态HTML处理——所有 {% ... %}{{ ... }} 都是Django专属语法,纯HTML解析器完全忽略它们,原样输出。

正确流程必须是:
HTTP请求 → Django路由匹配 → 视图调用 render() → 模板引擎解析 {% block %} 等标签 → 返回渲染后的HTML

正确配置步骤(以你的项目结构为准)

假设你的应用名为 core(根据 templates/core/ 路径推断),请确保以下配置全部正确:

1. 确保 settings.py 中已注册 core 应用并配置模板目录

# settings.py
INSTALLED_APPS = [
    # ... 其他应用
    'core',  # 确保已添加
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],  # 指向顶层 templates 目录
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

注意:'DIRS': [BASE_DIR / 'templates'] 是关键!它让Django能在项目根目录下的 templates/ 中查找模板(即你当前的 templates/core/base.html)。

2. 修正 urls.py(项目级或应用级)

在项目主 urls.py(如 mysite/urls.py)中包含 core 的URL:

# mysite/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('frontpage/', include('core.urls')),  # 推荐:将路由集中到 core/urls.py
]

并在 core/urls.py 中定义:

# core/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.frontpage, name='frontpage'),  # 可访问 http://127.0.0.1:8000/frontpage/
]

3. 补充 base.html 中的 content 块(你缺失的关键部分)

你当前的 base.html 只定义了 title 块,但 frontpage.html 继承后未填充 content——更重要的是,base.html 必须显式声明 {% block content %}{% endblock %} 才能被子模板覆盖





    {% block title %}{% endblock %}Djangochat


    {% block content %}
    
    

Welcome to DjangoChat

{% endblock %}

{% extends 'core/base.html' %}
{% block title %}Welcome | {% endblock %}
{% block content %}

Front Page

This is rendered via Django template engine.

{% endblock %}

4. 确保视图函数正确调用 render

# core/views.py
from django.shortcuts import render

def frontpage(request):
    return render(request, 'core/frontpage.html')  #  正确路径:'app_name/template_name.html'

5. 启动开发服务器并访问正确URL

python manage.py runserver

然后在浏览器中打开:
http://127.0.0.1:8000/frontpage/(注意末尾斜杠,与URL配置一致)

错误方式:双击 frontpage.html 打开(file:///...)、或用 Live Server 插件直接预览——这些绕过Django,必然显示原始模板语法。

快速自查清单

  • [ ] python manage.py runserver 已运行且无报错
  • [ ] 访问的是 http://127.0.0.1:8000/xxx/,而非本地文件路径
  • [ ] render() 函数第二个参数是字符串路径(如 'core/frontpage.html'),不是文件系统绝对路径
  • [ ] base.html 中已定义 content 块,且 frontpage.html 中有对应 {% block content %}
  • [ ] TEMPLATES['DIRS']APP_DIRS=True 能正确定位到 templates/core/

遵循以上步骤,Django将完整解析模板继承与块替换,{% block %} 再也不会以源码形式暴露在页面上。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。